我正在使用健康状况和结果的大型数据框架,我希望将10种健康状况合并为一个条件, 如果患者有a,或b,c或d等,则病情为条件一。 我试图像这样编码:
dataset$one <- ifelse(dataset, (dataset$a == 1)|
(dataset$b == 1)|
(dataset$c == 1)|
(dataset$d == 1), 1, 0)
这似乎适用于第一个条件,但不是在我添加条件时。 也许R不允许多个或陈述? 有什么建议?
答案 0 :(得分:3)
假设dataset
是数据框,请定义列名cols
,然后在any
的每一行中应用dataset[cols] == 1
。添加零以将结果从逻辑转换为数字:
cols <- c("a", "b", "c", "d")
dataset$one <- apply(dataset[cols] == 1, 1, any) + 0
如果列中包含您要排除的NA
值,请添加na.rm = TRUE
参数:
dataset$one <- apply(dataset[cols] == 1, 1, any, na.rm = TRUE) + 0
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)