如果我有以下数据框:
a b d
SI HOY 1
SI AYER 2
SI <NA> 1
NO AYER 1
SI HOY 2
<NA> HOY 2
NO HOY 2
NO AYER NA
如果我想创建一个名为“cond”的新变量,5
只要该列a
采用 的值SI
并且该列b
采用 的值,它就采用 的值AYER
,此外,10
只要该列a
等于NO
和该列b
等于HOY
,在其他情况下等于20
,并且如果存在NA
,则其值为NA
。
我制作的代码如下:
df$cond<-ifelse(df$a=="SI" & df$b=="AYER", 5,
ifelse(df$a=="NO" & df$b=="HOY", 10,
ifelse(df$a==""|df$b=="", NA, 20)))
df
结果如下:
a b d cond
SI HOY 1 20
SI AYER 2 5
SI <NA> 1 NA
NO AYER 1 20
SI HOY 2 20
<NA> HOY 2 NA
NO HOY 2 10
NO AYER NA 20
我的问题是,我怎样才能做同样的事情,但有一些其他功能可以让我缩短代码?
因为在我的真实数据库中,我必须创建一个使用 15 个条件创建的变量,就像我上面表达的那样。
非常感谢您提前。
一个有趣的方法是使用 function
dplyr::case_when()
,你会写得更少(不要太多),但最重要的是你会获得代码清晰:注释:
mutate()
,我们创建一个名为的新列cond
case_when()
的形式设置条件<condición> ~ <valor deseado>
,默认值设置为TRUE ~ 20
%>%
,如果不告诉我。您可以尝试使用条件创建一个表,例如
然后使用一个函数为数据帧的每一行分配该复式表的值,例如
然后只需使用附加条件扩展复式表,它应该可以工作。
问候。