我有下面的数据框。我想找出每个“基准”所在的“值”的百分位数。例如,“基准”为100大约是“值”的第75个百分点。
bb
另一种方法是,我将列出100个百分点(第1个-第100个百分点)。如果“基准”类似于任何百分比,则将输出设置为该百分比。
谢谢!
答案 0 :(得分:0)
我认为您需要ecdf
。剩下的问题(对我而言)是您的经验累积分布是按组还是整体进行。
每组:
d_f %>%
group_by(group, benchmark) %>%
mutate(bench_pctile = ecdf(value)(benchmark) * 100)
# # A tibble: 6 x 4
# # Groups: group, benchmark [2]
# group benchmark value bench_pctile
# <dbl> <dbl> <dbl> <dbl>
# 1 1 100 50 66.7
# 2 1 100 80 66.7
# 3 1 100 120 66.7
# 4 2 200 150 33.3
# 5 2 200 230 33.3
# 6 2 200 250 33.3
或者在整列中,我们需要在分组之前进行ecdf
调用:
valecdf <- ecdf(d_f$value)
d_f %>%
group_by(group, benchmark) %>%
mutate(bench_pctile = valecdf(benchmark) * 100)
# # A tibble: 6 x 4
# # Groups: group, benchmark [2]
# group benchmark value bench_pctile
# <dbl> <dbl> <dbl> <dbl>
# 1 1 100 50 33.3
# 2 1 100 80 33.3
# 3 1 100 120 33.3
# 4 2 200 150 66.7
# 5 2 200 230 66.7
# 6 2 200 250 66.7
一种支持这种方法的方法是:
### grouped
mean(100 <= d_f$value[1:3])
# [1] 0.3333333
mean(200 <= d_f$value[4:6])
# [1] 0.6666667
### ungrouped
mean(100 <= d_f$value)
# [1] 0.6666667
mean(200 <= d_f$value)
# [1] 0.3333333