我想获得频率值的分位数。 例如,假设我有以下数据:
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上做到这一点?
答案 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