2015-08-14 55 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