R比较两列,如果有任何列匹配条件,则返回第三列

时间:2018-12-12 00:31:51

标签: r if-statement

我有一个数据集: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))

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.nacomplete.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))