2015-08-14 69 views
1

我想獲取頻率值上的分位數。 例如,假設我有數據,如下列:頻率值上的R分位數

 
length frequency 
1  13 # There are 13 length 1 items. 
2  20 # There are 20 length 2 items. 
8  17 
10  25 
... 
[10000+ more entries in file] 

所以我想獲得位數爲特定值像0.05,0.10,0.50,0.90,0.95,0.99。另外,我想獲得一定長度的等級。 我如何在R或Python上做到這一點?

回答

2

使用dplyr,首先創建與累積比例柱:

library(dplyr) 
dta1<- dta %>% arrange(length) %>% 
     mutate(quartile = cumsum(frequency/sum(frequency))) 

現在,我們可以簡單地查找第一個的每個比所要求的四分位數較大的(在這種情況下0.5):

dta %>% filter(quartile > 0.5) %>% 
     slice(1) 

NB這個四分位取景器是特別愚蠢的,取決於你的關係等。

1

如果你想要一個base-R解決方案,試試這個(它的工作原理與@ jeremycg的dplyr解決方案 - 計算每個長度的累積頻率,並要求您找到具有累積頻率> =該分位數的第一個長度的特定分位數。

dta <- data.frame(length=c(1,2,8,10), frequency=c(13,20,17,25)) 
dta$cumfreq <- cumsum(dta$frequency)/sum(dta$frequency) 

qtle <- 0.5 # quantile to find 
dta$length[dta$cumfreq >= qtle][1] # in a tie, picks the lower length 

爲了評定由頻率長度看到?rank

rank(dta$frequency) # ranks frequencies, increasing 
rank(-dta$frequency) # rank decreasing 
rank(-dta$frequency)[dta$length == 8] # rank of length 8: 3rd most common