频率值的R分位数

时间:2015-08-14 00:13:30

标签: python r quantile

我想获得频率值的分位数。 例如,假设我有以下数据:

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 个答案:

答案 0 :(得分:2)

使用dplyr,首先创建一个累积比例的列:

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

现在我们可以简单地找到每个大于所需四分位数的第一个(在这种情况下为0.5):

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

注意这个四分位数发现者特别愚蠢,由你来解决关系等问题。

答案 1 :(得分:1)

如果你想要一个base-R解决方案,试试这个(它与@ jeremycg的@RunWith(Parameterized.class)解决方案的工作方式相同 - 计算每个长度的累积频率,并询问特定的分位数,你会发现累积的第一个长度频率&gt; =分位数。

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