R中的ifelse:嵌套的替代方案

时间:2016-01-13 13:12:28

标签: r if-statement

我编写了一系列在数据框中创建新列的ifelse语句。例如:

rf$rs.X<- ifelse(rf$chl==0 & rf$dm=="y" & rf$gdr=="m" & rf$smk=="n" & rf$age>=70 & rf$sbp>=160, ">=40%", NA)

当我运行其他ifelse语句时,它们会覆盖前一个语句,因为我将它映射到数据框中的同一个新列(即我的所有ifelse语句都以相同的rf $ rs.X开头)。

我知道对于每个语句,我可以指定要创建的新列,但是我有68个ifelse语句,我不想​​为每个语句添加新列:我想要一个新列。

为了解决这个问题,我尝试将所有68个ifelse语句嵌套,但它似乎不起作用(当我尝试运行它时,我得到一个蓝色加号(+))。在这里阅读后,似乎嵌套有限(n = 50)。

因此,对于一系列ifelse语句,如何将所有输出都输出到数据帧中的同一列,而不使用ifelse语句覆盖前一个语句?

谢谢!

1 个答案:

答案 0 :(得分:1)

我会这样写的:

rf$rs.X<- with( rf, ifelse(chl==0 & dm=="y" & gdr=="m" &
                           smk=="n" & age>=70 & sbp>=160,    ">=40%", NA)

然后下一个(对于低sbp案例,可以将rs.X值作为替代:

rf$rs.X<- with( rf, ifelse(chl==0 & dm=="y" & gdr=="m" &
                           smk=="n" & age>=70 & sbp < 160,    "30-39%", rs.X)

这样就不会覆盖不符合条件的行的值。