具有这样的data.frame:
data.frame(id = c(1,2,3), stock = c(3,1,4), bill = c(1,0,1), bear = c(3,2,5))
如何将所有列与id列相加,并保持前两列具有较高的频率。
预期输出示例
data.frame(id = c(1,2,3), stock = c(3,1,4), bear = c(3,2,5))
答案 0 :(得分:3)
在基数R中,我们可以使用colSums
对各列求和,sort
,并使用tail
选择2个最有价值的列的名称。
cbind(df[1], df[names(tail(sort(colSums(df[-1])), 2))])
# id stock bear
#1 1 3 3
#2 2 1 2
#3 3 4 5
答案 1 :(得分:2)
另一种base R
可能是:
cbind(df[1], df[-1][rank(-colSums(df[-1])) %in% 1:2])
id stock bear
1 1 3 3
2 2 1 2
3 3 4 5