R 我可以将一个数据帧中的10个逻辑列乘以一列,而忽略错误的结果,比如矩阵吗?
我有一个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 错误的 错误的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
这是很容易做到的。您只需通过如下所示的
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