在R中,检查行中是否显示1(在任何选定列中)
数据是二进制的。我需要编写一些代码来检查所选列是否为1,并用这些信息填充新列 我不希望它检查dataframe中的所有列,只按名称检查指定的列 让我们假设感兴趣的栏目是:问题1,吸烟者和饮酒者 我有:在R中,检查行中是否显示1(在任何选定列中),r,dataframe,R,Dataframe,数据是二进制的。我需要编写一些代码来检查所选列是否为1,并用这些信息填充新列 我不希望它检查dataframe中的所有列,只按名称检查指定的列 让我们假设感兴趣的栏目是:问题1,吸烟者和饮酒者 我有: Subject question1 question2 smoker drinker A 1 0 0 1 B 0 1 0
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])
list1您可以使用“or”操作符,
。它在这里工作正常,因为R将1视为真,0视为假:
> 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")
您可以使用“或”运算符,|
。它在这里工作正常,因为R将1视为真,0视为假:
> 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")
rowSums(df[-1])>0
@Onyambu如果可能的话,我更喜欢语义上有意义的代码,我认为我的代码读起来非常清楚,就是“检查Q1、吸烟者或饮酒者是否为1”,但可以将其作为一个单独的答案发布。rowSums(df[-1])>0
@Onyambu如果可能,我更喜欢语义上有意义的代码,我认为我的代码读起来非常清楚,“检查Q1、吸烟者或饮酒者是否为1”,但可以将其作为单独的答案发布。as.numeric(apply(newdata[2:4],1,function(x)any(x==1))
as.numeric(apply(newdata[2:4],1,function(x)any(x==1))
。