R 我可以将一个数据帧中的10个逻辑列乘以一列,而忽略错误的结果,比如矩阵吗?

R 我可以将一个数据帧中的10个逻辑列乘以一列,而忽略错误的结果,比如矩阵吗?,r,dataframe,R,Dataframe,我有一个5500行15列的数据帧,其中5:15列是逻辑的。对于每一行,TRUE仅出现在其中一列5:15中。我已经用我检测到的变量名字符串替换了TRUE 所以我现在要做的是将5:15列合并到一个列中,保留行索引。基本上,我认为如果我可以将列5:15相乘,就像它们是一个矩阵一样,忽略假值,只保留字符串,那就太好了 我尝试了mutate、cbind、rbind和union,但它们在这个实例中不起作用-我希望保持行匹配 这是一个最小的示例,只有三个逻辑列 对象编号 单词 价值 var1 var2 var

我有一个5500行15列的数据帧,其中5:15列是逻辑的。对于每一行,TRUE仅出现在其中一列5:15中。我已经用我检测到的变量名字符串替换了TRUE

所以我现在要做的是将5:15列合并到一个列中,保留行索引。基本上,我认为如果我可以将列5:15相乘,就像它们是一个矩阵一样,忽略假值,只保留字符串,那就太好了

我尝试了mutate、cbind、rbind和union,但它们在这个实例中不起作用-我希望保持行匹配

这是一个最小的示例,只有三个逻辑列

对象编号 单词 价值 var1 var2 var3 2. 字1 5. 错误的 错误的 var3 4. 字2 22 错误的 var2 错误的 9 字3 45 var1 错误的 错误的
这是很容易做到的。您只需通过如下所示的
apply()
命令添加列

mydata$names <- apply(mydata, 1, function(x) x[x != FALSE])

我们可以使用带有行/列索引的矢量化选项

mydata[, names := as.data.frame(.SD)[cbind(seq_len(.N),
  max.col(.SD != 'FALSE', 'first'))], .SDcols = patterns('^var\\d+$')]
mydata
#   object_number  word value  var1  var2  var3 names
#1:             2 word1     5 FALSE FALSE  var3  var3
#2:             4 word2    22 FALSE  var2 FALSE  var2
#3:             9 word3    45  var1 FALSE FALSE  var1

非常感谢,这非常有效。如果对您有帮助,您可以投票并接受答案,以表明问题已解决:-)非常感谢您教我如何在R中建立索引!非常感谢
mydata[, names := as.data.frame(.SD)[cbind(seq_len(.N),
  max.col(.SD != 'FALSE', 'first'))], .SDcols = patterns('^var\\d+$')]
mydata
#   object_number  word value  var1  var2  var3 names
#1:             2 word1     5 FALSE FALSE  var3  var3
#2:             4 word2    22 FALSE  var2 FALSE  var2
#3:             9 word3    45  var1 FALSE FALSE  var1