R 如何将多个逻辑列汇总为一个额外的列?
我一直在四处搜索,但找不到类似的问题 我有类似的想法:R 如何将多个逻辑列汇总为一个额外的列?,r,R,我一直在四处搜索,但找不到类似的问题 我有类似的想法: data<-data.frame(RESULT1=c(TRUE,TRUE,FALSE,FALSE),RESULT2=c(FALSE,TRUE,TRUE,FALSE),RESULT3=c(FALSE,FALSE,TRUE,TRUE)) 不久前我写了一个非常笨拙的函数,它确实可以工作,但一定有更好的方法来写这个 data$COMMENTS<-"" for(res in c("RESULT1","RESULT2","RESULT3"
data<-data.frame(RESULT1=c(TRUE,TRUE,FALSE,FALSE),RESULT2=c(FALSE,TRUE,TRUE,FALSE),RESULT3=c(FALSE,FALSE,TRUE,TRUE))
不久前我写了一个非常笨拙的函数,它确实可以工作,但一定有更好的方法来写这个
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=","))}})}
data$COMMENTS您可以使用apply
:
data["comments"] <-
apply(data, 1, function(x) paste0(names(data)[x], collapse=","))
美好的谢谢我试着通过编写:apply(data,1,function(x){return(ifelse(x==TRUE,names(x)[x==TRUE],”)}),collapse=“,”),这不起作用……我不知道我可以这样写。谢谢!!!:)如果(x==TRUE)
这个的问题是x
是一个长度为3的向量,因此它不可能“刚好等于”TRUE。实际上,只测试结果向量中的第一项。谢谢!:)这也是一个很好的例子,帮助我理解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