如何根据列对 R 中所有列的总和的贡献删除数据框中的列

Dir*_*tke 3 r

我试图根据它们对所有列的总和的贡献从我的数据框中删除列。

一个 1x5 数据帧的例子如下(我想也可以以类似的方式从 5x1 数据帧中删除行,然后转置它)。假设这些值的总和为 100。

df <- data.frame(V1 = 5, V2 = 10, V3 = 20, V4 = 40, V5 = 25)

V1    V2     V3    V4    V5  

5     10     20    40    25 
Run Code Online (Sandbox Code Playgroud)

我现在想保留对所有列的总和贡献最大的列,例如至少 80%。

所以我想要实现的是:

V3    V4    V5  

20    40    25 
Run Code Online (Sandbox Code Playgroud)

有没有一种优雅的方法来做到这一点?

提前致谢!

Ron*_*hah 5

可以采取许多可能的方法。基数 R 中的一种方法unlist是数据,sort按降序排列并取值比率的累积总和。当它达到阈值 ( 0.8)时停止并选择所有列直到那个。

vals <- cumsum(prop.table(sort(unlist(df), decreasing = TRUE))) > 0.8
df[names(vals[1:which.max(vals)])]

#  V4 V5 V3
#1 40 25 20
Run Code Online (Sandbox Code Playgroud)