我有一个数据集:data1,其中有ME和PDR列。
我要创建第三列:情况如下:
ME PDR case
1 2 2
NA 1 1
NA 1 1
1 2 2
NA NA NA
我尝试使用此命令,但是当我在任何一列中都只有1个而在任何列中都没有2个时,它不会返回1。
data1$case=ifelse(data1$ME==2 | data1$PDR==2 ,2,ifelse(data1$ME==NA & data1$PDR==NA,NA,1))
答案 0 :(得分:0)
我们可以使用pmax
data1$case <- do.call(pmax, c(data1, na.rm = TRUE))
data1$case
#[1] 2 1 1 2 NA
关于带有NA
的OP的情况,对于==
的任何元素,NA
返回NA
。因此,我们需要在NA
的基础上增加一个条件(两列都为& !is.na(ME)
-
with(data1, ifelse((ME == 2 & !is.na(ME)) | (PDR == 2 & !is.na(PDR)),
2, ifelse(is.na(ME) &is.na(PDR), NA, 1)))
#[1] 2 1 1 2 NA
注意:不建议使用==
来检查NA
,因为当缺少值(is.na
,complete.cases
)时,有些函数可以获取逻辑向量 >
data1 <- structure(list(ME = c(1L, NA, NA, 1L, NA), PDR = c(2L, 1L, 1L,
2L, NA)), class = "data.frame", row.names = c(NA, -5L))