我想在data.frame上按行应用函数来连接列 Headers ,具体取决于行中的值 .
df
A B
1 TRUE TRUE
2 FALSE TRUE
3 FALSE FALSE
A B Result
1 TRUE TRUE A / B
2 FALSE TRUE B
3 FALSE FALSE NA
我读了关于使用mutate()和rowwise()的dplyr,但我不知道如何应用它们,因为列不是常量 .
对于一行“我”,我会做类似的事情:
paste(names(df)[as.logical(df[i,])], collapse = ' / ')
欢迎任何帮助 .
谢谢 .
2 回答
如果数据集不是很大(即数百万/数十亿行),我们可以使用
apply
和MARGIN=1
循环遍历行,使用逻辑vector
作为索引将它们的names
子集,并将它们组合在一起 . 在单行中编码更容易 .但是,如果我们有一个大数据集,另一个选项是创建一个键/值对并通过匹配替换值,它比上述解决方案更快 .
或者我们可以使用算术运算来做到这一点
基准
使用@ DavidArenburg的数据集并包含此处发布的两个解决方案(将'df'的列名更改为'A'和'B')
我建议不要在
data.frame
上使用apply
(由于矩阵转换),特别是边距为1(R中的行操作很慢) . 相反,您可以非常轻松地在列上进行矢量化而无需矩阵转换,这是一个示例以下是显示约X16改善的基准