如何将多个逻辑列汇总到一个额外的列中?

时间:2014-04-22 20:38:28

标签: r

我一直在寻找,但找不到类似的问题...

我有类似的东西:

data<-data.frame(RESULT1=c(TRUE,TRUE,FALSE,FALSE),RESULT2=c(FALSE,TRUE,TRUE,FALSE),RESULT3=c(FALSE,FALSE,TRUE,TRUE))

我希望有一个基于多个逻辑列的摘要列,结果是:

  RESULT1 RESULT2 RESULT3  COMMENTS
1    TRUE   FALSE   FALSE  RESULT1
2    TRUE    TRUE   FALSE  RESULT1,RESULT2
3   FALSE    TRUE    TRUE  RESULT2,RESULT3
4   FALSE   FALSE    TRUE  RESULT3

我写了一个非常笨拙的功能,但它确实有效,但必须有更好的方法来写这个......

data$COMMENTS<-""
for(res in c("RESULT1","RESULT2","RESULT3")){
data$COMMENTS[eval(parse(text=paste("data$",res,sep="")))==TRUE] <- sapply(data$COMMENTS[eval(parse(text=paste("data$",res,sep="")))==TRUE],function(x){if(x==""){return(paste(x,res,sep=""))}else{return(paste(x,res,sep=","))}})}

非常感谢任何建议!!

1 个答案:

答案 0 :(得分:6)

您可以使用apply

data["comments"] <- 
  apply(data, 1, function(x) paste0(names(data)[x], collapse=","))

产地:

  RESULT1 RESULT2 RESULT3        comments
1    TRUE   FALSE   FALSE         RESULT1
2    TRUE    TRUE   FALSE RESULT1,RESULT2
3   FALSE    TRUE    TRUE RESULT2,RESULT3
4   FALSE   FALSE    TRUE         RESULT3
相关问题