s 是一个大数组,只需将表保存在数据库中
> table_s
s
1 2 3 4 5
3000000 1 1 999999999999999999 34
如何用 R 中的 table_s 计算分位数?
谢谢
您可以使用 Hmisc 包中的分位数函数,该函数允许权重。
Hmisc::wtd.quantile(as.numeric(names(table_s)),weights = table_s)
我能想到的最简单(但计算量大)的方法是将表重新扩展为观察向量并使用该quantile
函数:
s <- c(3000000,1,1,999999999999999999,34)
names(s) <- 1:5
quantile(rep.int(as.integer(names(s)),times=s))
# 0% 25% 50% 75% 100%
# 1 4 4 4 5
如果您正在寻找更快的东西,那么您可能需要编写自己的函数。
编辑:正如 Matthew Lundberg 在评论中所说,上面的代码不起作用。它只会在sum(s)
小于向量的最大可能长度时运行,目前为 2^31-1 < 10^10。