我有以下data.frame
:ifelse基于以下几个条件
a <- c(26, 26, 156, 801, 143, 4, 455, 446, 447, 241, 461, 343, 359, 409, 241)
b <- c(26, 26, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)
c <- c(NA, NA, NA, NA, NA, 4, NA, NA, NA, NA, NA, NA, NA, NA, NA)
d <- c(NA, NA, NA, NA, NA, NA, NA, 446, 447, NA, 461, NA, NA, NA, NA)
test <- data.frame(a,b,c,d)
我希望得到基于在test$b
,test$c
和test$d
值的下一个矢量e
。我还是习惯在Excel中,如果命令,所以我想这:
test$e <- ifelse(is.na(b)==TRUE, ifelse(is.na(c)==TRUE, ifelse(is.na(d)==TRUE)), test$a, NA)
和
test$e <- ifelse(is.na(b)==TRUE && is.na(c)==TRUE && is.na(d)==TRUE, test$a, NA)
显然没有奏效。我敢肯定,这可能不会太困难,test
看起来应该是这样算账:
a b c d e
1 26 26 NA NA NA
2 26 26 NA NA NA
3 156 NA NA NA 156
4 801 NA NA NA 801
5 143 NA NA NA 143
6 4 NA 4 NA NA
7 455 NA NA NA 455
8 446 NA NA 446 NA
9 447 NA NA 447 NA
10 241 NA NA NA 241
11 461 NA NA 461 NA
12 343 NA NA NA 343
13 359 NA NA NA 359
14 409 NA NA NA 409
15 241 NA NA NA 241
什么是ifelse
做到这一点的正确方法以及是否有其他(也许更简单)的方式? 谢谢!
这工作完美,谢谢。 – Thomas
嗯..该方法给了我所有的新手,奇怪的... –
请注意,你不需要== TRUE部分,因为is.na已经返回一个逻辑值。 – Dason