创建一个新的变量,使用if else组合其他几个变量

时间:2018-03-24 17:33:19

标签: r if-statement recode

我正在使用健康状况和结果的大型数据框架,我希望将10种健康状况合并为一个条件, 如果患者有a,或b,c或d等,则病情为条件一。 我试图像这样编码:

      dataset$one <-  ifelse(dataset, (dataset$a == 1)|
                            (dataset$b == 1)|
                            (dataset$c  == 1)|
                            (dataset$d  == 1),  1, 0)

这似乎适用于第一个条件,但不是在我添加条件时。 也许R不允许多个或陈述? 有什么建议?

2 个答案:

答案 0 :(得分:3)

假设dataset是数据框,请定义列名cols,然后在any的每一行中应用dataset[cols] == 1。添加零以将结果从逻辑转换为数字:

cols <- c("a", "b", "c", "d")
dataset$one <- apply(dataset[cols] == 1, 1, any) + 0

备注

  1. 如果列中包含您要排除的NA值,请添加na.rm = TRUE参数:

    dataset$one <- apply(dataset[cols] == 1, 1, any, na.rm = TRUE) + 0
    
  2. Rfast套餐有rowAny,如果您不需要na.rm,可以使用

    library(Rfast)
    dataset$one <- rowAny(dataset[cols] == 1) + 0
    

答案 1 :(得分:2)

我们可以将Reduce|

一起使用
dataset$one <- as.integer(Reduce(`|`, lapply(dataset[c('a', 'b', 'c', 'd')], `==`, 1))

或另一个选项是rowSums

dataset$one <- as.integer(rowSums(dataset[c('a', 'b', 'c', 'd')] == 1) > 0)