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

在R的data.table中基于指定子组拟合ecdf并计算分位数

解决方案

可以通过在data.table的分组计算中,先筛选指定子组的value来拟合ecdf,再将该函数应用到当前分组的所有行,实现需求。具体代码如下:

library(data.table)

set.seed(101)
dt <- data.table(
  group = c(rep("A",3),rep("B",3),rep("C",3), rep("D",3)), 
  date = rep(as.Date(19000:19002, origin = "1970-01-01"),4), 
  value = rnorm(12)
)

# 按date分组,仅用group为A/B/C的value拟合ecdf,再计算所有行的百分位数
dt[, Percentile := ecdf(value[group %in% c("A","B","C")])(value), by = date]

# 查看结果
dt

代码说明

  • by = date:按日期分组处理每个日期的数据
  • value[group %in% c("A","B","C")]:在每个日期分组内,仅提取group属于指定子组的value数据,用于拟合经验分布函数ecdf()
  • ecdf(...) (value):将拟合好的分布函数应用到当前日期分组的所有value(包括D组),得到对应的百分位数

输出结果

运行代码后会得到你期望的结果:

group       date      value Percentile
 1:     A 2022-01-08 -0.3260365  0.3333333
 2:     A 2022-01-09  0.5524619  1.0000000
 3:     A 2022-01-10 -0.6749438  0.3333333
 4:     B 2022-01-08  0.2143595  0.6666667
 5:     B 2022-01-09  0.3107692  0.6666667
 6:     B 2022-01-10  1.1739663  1.0000000
 7:     C 2022-01-08  0.6187899  1.0000000
 8:     C 2022-01-09 -0.1127343  0.3333333
 9:     C 2022-01-10  0.9170283  0.6666667
10:     D 2022-01-08 -0.2232594  0.3333333
11:     D 2022-01-09  0.5264481  0.6666667
12:     D 2022-01-10 -0.7948444  0.0000000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:15:23