在R中,检查1是否出现在一行中(在任何选定的列中)

时间:2018-07-04 00:00:03

标签: r dataframe

数据为二进制。我需要编写一些代码来检查选定的任何列是否为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])

但是返回的是一个带有布尔值的向量,我无法将其作为一列合并到完整数据中。

我知道这应该很简单,但是我很难做到这一点。  非常感谢您的帮助!

1 个答案:

答案 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")