我试图根据它们对所有列的总和的贡献从我的数据框中删除列。
一个 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)
有没有一种优雅的方法来做到这一点?
提前致谢!
可以采取许多可能的方法。基数 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)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |