数据为二进制。我需要编写一些代码来检查选定的任何列是否为1并使用此信息填充新列。
我不希望它仅按名称检查数据框中的所有列。
让我们假装感兴趣的栏目:问题1,吸烟者和饮酒者
我有:
Subject question1 question2 smoker drinker
A 1 0 0 1
B 0 1 0 0
C 0 0 0 0
我想要:
Subject question1 question2 smoker drinker q1_smoker_or_drinker
A 1 0 0 1 1
B 0 1 0 0 0
C 0 0 0 0 0
我尝试过:
list1<- c('Subject', 'question1','smoker','drinker')
newdata <- data_scored[, list1]
grepl("1", newdata[2:4])
但是返回的是一个带有布尔值的向量,我无法将其作为一列合并到完整数据中。
我知道这应该很简单,但是我很难做到这一点。 非常感谢您的帮助!
答案 0 :(得分:3)
您可以使用“或”运算符|
。在这里可以正常工作,因为R会将1视为true,将0视为false:
> df
Subject question1 question2 smoker drinker
1 A 1 0 0 1
2 B 0 1 0 0
3 C 0 0 0 0
> df$q1_smoke_drink = df$question1 | df$smoker | df$drinker
> df
Subject question1 question2 smoker drinker q1_smoke_drink
1 A 1 0 0 1 TRUE
2 B 0 1 0 0 FALSE
3 C 0 0 0 0 FALSE
当|
没有1和0的情况下仍然可以正常工作时,您只需要对条件更明确一些即可,例如
(df$question3 == "a") | (df$question4 == "b")