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

R语言:如何计算分组收入数据的加权百分位数

加权百分位数计算方案

下面是几种替代手动cumsum写法的方法,都是R中专门用于加权百分位数/累积分布计算的工具:

  • 用dplyr简化现有逻辑
    如果你不想额外加载包,用dplyr的管道语法可以让代码更简洁易读,避免直接引用列名:

    library(dplyr)
    
    test %>%
      mutate(percentile = cumsum(pop) / sum(pop) * 100)
    

    运行后会直接在原数据框中添加percentile列,对应每个max_income_from的加权百分位数。

  • 用weights包的wtd.ecdf函数
    weights包的wtd.ecdf专门用于生成加权经验累积分布函数,能直接计算每个收入上限对应的累积百分比:

    library(weights)
    
    # 创建加权ECDF函数
    weighted_ecdf <- wtd.ecdf(test$max_income_from, weights = test$pop)
    # 计算百分位数并添加到原数据
    test$percentile <- weighted_ecdf(test$max_income_from) * 100
    
  • 用Hmisc包的wtd.table函数
    Hmisc包的wtd.table支持计算加权累积频率,搭配dplyr可以轻松匹配到原数据:

    library(Hmisc)
    library(dplyr)
    
    # 计算加权累积频率表
    cumulative_table <- wtd.table(test$max_income_from, weights = test$pop, cumulative = TRUE)
    # 转换为数据框并合并到原数据集
    test <- left_join(test, as.data.frame(cumulative_table), by = c("max_income_from" = "Var1")) %>%
      mutate(percentile = Freq / sum(pop) * 100)
    

其实你手动用cumsum的逻辑是完全正确的,用dplyr简化后已经足够简洁;如果需要处理更复杂的加权场景(比如非整数权重、分组加权等),上面的专门函数会更适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:15:08