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

如何在R中按组计算分离重复值的累积分布(替代cume_dist)

自定义分组累计分布(分离重复值)

原始数据集

dat <- data.frame(YEAR = c(rep(1999,4),rep(2002,3)), VALUE = c(1,2,3,2,1,2,3))

需求说明

需要按YEAR分组后,为VALUE新增一列标记组内位置:功能类似dplyr的cume_dist(),但要分离重复值。例如对序列1,2,2,3,cume_dist()返回0.25,0.75,0.75,1.00,我们需要的结果是0.25,0.50,0.75,1.00。

已尝试的代码

  • 使用cume_dist()无法区分重复值:
dat %>% group_by(YEAR) %>% mutate(cumdist = cume_dist(VALUE))
  • 使用row_number(VALUE)能得到正确的排名分子(每组内的位次,重复值也会按出现顺序分配不同排名):
dat %>% group_by(YEAR) %>% mutate(rownumber = row_number(VALUE))

解决方案

核心是用dplyr的n()函数获取当前组的行数,再将row_number(VALUE)的结果除以n()即可:

library(dplyr)

dat %>%
  group_by(YEAR) %>%
  mutate(cumdist_custom = row_number(VALUE) / n()) %>%
  ungroup() # 可选,处理完后取消分组状态

结果验证

运行后得到的cumdist_custom列完全符合需求:

  • 1999组(4条数据):0.25, 0.5, 0.75, 1
  • 2002组(3条数据):0.3333333, 0.6666667, 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:33:14