You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中计算达到列总值80%阈值所需的数值数量

解决方案:计算累计占比达80%所需的数值个数

没问题,我来帮你调整这段R代码,实现你想要的功能——对每一列从大到小排序后,找到累计占比首次达到列总值80%所需的最小数值个数。

修改后的完整代码

set.seed(12345)
df1 = data.frame(replicate(10,sample(0:500,1000,rep=TRUE)))
df2 = data.frame(replicate(10,sample(0:500,1000,rep=TRUE)))
list_dfs = list(df1, df2) # 替换原变量名list,避免和R内置函数冲突

# 核心逻辑修改部分
do.call(cbind, lapply(list_dfs, function(x) {
  # 计算每个数值占对应列总和的比例
  col_props <- x / colSums(x)[col(x)]
  # 对每列执行:降序排序→计算累计占比→找首次达80%的位置
  sapply(col_props, function(col) {
    sorted_props <- sort(col, decreasing = TRUE)
    cumulative_proportion <- cumsum(sorted_props)
    # 取第一个累计占比≥0.8的索引,就是所需的数值个数
    which(cumulative_proportion >= 0.8)[1]
  })
}))

关键修改说明

  • 变量名优化:把原代码的list改成list_dfs,因为list是R的内置函数,用它做变量名容易引发意外错误,算是个实用的小细节~
  • 核心逻辑替换:原代码是直接取前5个值的占比总和,现在改成了:
    1. 对列内数值的占比进行降序排序
    2. 用cumsum()计算累计占比
    3. 通过which(cumulative_proportion >= 0.8)[1]找到第一个累计占比达标位置,这个位置就是我们要的数值个数
  • 结果可复现:因为保留了set.seed(12345),你每次运行这段代码都会得到相同的结果,方便测试和验证。

内容的提问来源于stack exchange,提问作者nymuffin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:47:30