2016-01-13 98 views
0

我写了一系列在数据框中创建新列的ifelse语句。例如:R中的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语句覆盖前一个语句?

谢谢!

+5

查找表是不是很容易 – 2016-01-13 13:15:08

+0

是的,抱歉,这是一个转位错误在实际的代码中我有'rf $ chl == 0 ' – James

+5

你可以给一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610)? – Jaap

回答

1

我会写这样的:

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

那么下一个(低伴侣的情况下说的,能有rs.X值作为替代:

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

所以这样的值不会被覆盖的非排序行