Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将多个逻辑列汇总为一个额外的列?_R - Fatal编程技术网

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