【发布时间】:2020-08-08 13:04:33
【问题描述】:
我有以下数据框。我想找出每个“基准”所在的“价值”百分位数。例如,100 的“基准”大约是“价值”的第 75 个百分位。
group <- c(1,1,1,2,2,2)
benchmark <- c(100,100,100,200,200,200)
value <- c(50,80,120,150,230,250)
d_f <- data.frame(group,benchmark, value)
d_f %>%
group_by(group, benchmark) %>%
summarise(q25 = quantile(value, 0.25),
q50 = quantile(value, 0.50),
q75 = quantile(value, 0.75)
# can add more percentile
)
另一种方法是,我将列出 100 个百分位数(第 1 - 100 个百分位数)。如果“基准”与任何百分位数相似,请将输出设置为该百分位数。
谢谢!
【问题讨论】:
-
40 表示 benchmark=200 大约是 value 列的第 40 个百分位。我打算在输出中显示所有 100 个百分位点,所以为了简短起见,我只显示了 25、50、75。这不会影响“每个基准位于哪个百分位价值”列。
-
是整个
value列还是group中的values?你知道“真相”数字吗?我的猜测是,如果分组,ecdf(d_f$value[1:3])(100)就是您需要的(易于扩展)。如果未分组,则ecdf(d_f$value)(c(100,200))将为您提供基准测试的两个百分位数。 (两者都是[0,1],需要*100。) -
感谢您的想法!它应该是每组。但是,我认为 bench_pctile 100 的结果应该是第 75 位,而不是第 66.6 位。算错了吗?
标签: r dplyr percentile