2

s 是一个大数组,只需将表保存在数据库中

> table_s
s
1       2 3  4                   5
3000000 1 1  999999999999999999  34

如何用 R 中的 table_s 计算分位数?

谢谢

4

2 回答 2

3

您可以使用 Hmisc 包中的分位数函数,该函数允许权重。

Hmisc::wtd.quantile(as.numeric(names(table_s)),weights = table_s)
于 2012-12-25T04:22:44.793 回答
0

我能想到的最简单(但计算量大)的方法是将表重新扩展为观察向量并使用该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。

于 2012-12-25T04:20:35.883 回答