将最频繁的列保留在data.frame中

时间:2020-02-04 09:54:38

标签: r

具有这样的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))

2 个答案:

答案 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