我有一个data.frame有几个零值的变量。我需要构造一个额外的变量,它会返回每个观察结果不为零的变量组合。例如。如何在R data.frame中创建组合变量?
df <- data.frame(firm = c("firm1", "firm2", "firm3", "firm4", "firm5"),
A = c(0, 0, 0, 1, 2),
B = c(0, 1, 0, 42, 0),
C = c(1, 1, 0, 0, 0))
现在我想生成新的变量:
df$varCombination <- c("C", "B-C", NA, "A-B", "A")
我想出了这样的事情,这显然没有奏效:
for (i in 1:nrow(df)){
df$varCombination[i] <- paste(names(df[i,2:ncol(df) & > 0]), collapse = "-")
}
谢谢!到目前为止所有建议的解决方案都可以很好地工作所以选择你的版本作为最好的只是我的品味。它缺少NA替代品,但那不是绊脚石。 – Antti
@Antti它不仅是品味的问题。 R明智的操作在R是一种威慑语言和所有的情况下是直观的。你已经选择了最慢的解决方案。在我的答案中看到一些基准。所以请在你的时候定义“* neatest *”。 –
@DavidArenburg我绝对同意R中的逐行循环不是一个快速的解决方案。在我的辩护中,我认为循环使得它更清晰一些,并且我试图保持它接近原始代码,这样逻辑会更容易让提问者遵循。 –