我有一个分组tibble(tbl_df),包含来自组合数据集的累积频率分布,其中列“size”包含范围从30到800的对象大小,列“prop”包含相应的概率,列cdf包含累积频率。
具体如下:
| 尺寸|支柱|民防部队|群|
| - -----|- -----|- -----|- -----|
| 三十|0.0000832| 0.00000832|一种|
| 三十一|0.0.0000849| 0.0.0000168|一种|
| 三十二|0.0.0000885| 0.0000257|一种|
| 三十三个|0.0.0000918| 0.0000348|一种|
| 三十四|0.0.00000938| 0.0000442|一种|
| ......这是什么?|......这是什么?|......这是什么?|......这是什么?|
| 三十|0.00000832| 0.00000832| B|
| 三十一|0.0.0000849| 0.0.0000168| B|
| ......这是什么?|......这是什么?|......这是什么?|......这是什么?|
我想用cdf列找到四分位数。我知道这是一个在真实的生活中相当容易的问题,我对R相对来说是个新手。我尝试使用summarize函数,但后来意识到它没有考虑到cdf,只是返回大小顺序。
data %>% group_by(group) %>%
summarize(Q1=quantile(size,probs=0.25),
median=quantile(size,probs=0.5),
Q3=quantile(size,probs=0.75)) %>%
dplyr::mutate_if(is.numeric, round, 0)
有没有一个函数可以用来优雅地总结数据?并且是否可以计算平均值(即sum(size x prob)/n也是一样吗?
更新:谢谢回答。
| group | cut_cdf | size |
| ---- | ---- | --- |
| a | (0.25,0.5] | 161 |
| a | (0.5,0.75] | 174 |
| a | (0.75,1] | 195 |
| b |(0.25,0.5] | 250 |
|...|...|...|
1条答案
按热度按时间c2e8gylq1#
尝试
在
mutate
中,我们根据累积的cdf来划分数据。在summarize
中,我们取第一个福尔斯该类别的size值。这将是“刚好高于”0、0.25、0.5等的第一个值。除非你想要第0个百分位数,否则slice(-1)
会将其从等式中删除。