2012-12-25 40 views
2

s是一個大陣列,只需保存桌在數據庫R:知道表(一個或多個),如何calc下位數(S)

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

如何與R中table_s calc下分位數(S) ?

感謝

+0

型'?quantile'到R控制檯 –

+0

@timriffe沒有'類'table' quantile'功能,和'rep'不適於這種大'times'參數。不知道'分位數'在這裏有幫助。 –

+0

oops,分位數沒有權重,但是Hmisc :: wtd.quantile()。將回答 –

回答

3

您可以使用Hmisc軟件包中的分位數功能,該功能允許重量。

Hmisc::wtd.quantile(as.numeric(names(table_s)),weights = table_s) 
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。

+1

2.15.2不喜歡那個代碼:'代表錯誤(as.integer(names(s)),times = s):無效'times'的值 另外:警告信息: 在rep。 int(as.integer(names(s)),times = s):通過強制引入的NAs' –

+0

哎呀,你是對的。我認爲只要產生的向量小於R:2^31-1中小於10^10的向量的最大長度,就會發生這種情況。 –

相關問題