我一直在寻找,但找不到类似的问题...
我有类似的东西:
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=","))}})}
非常感谢任何建议!!
答案 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