R语言 从累积分布表中查找四分位数

sg2wtvxw  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(117)

我有一个分组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 |
|...|...|...|
c2e8gylq

c2e8gylq1#

尝试

df |>
  mutate(
    cut_cdf = cut(cdf,
        breaks = c(0, 0.25, 0.5, 0.75, 1),
        labels = c("Min", "Q25", "Q50", "Q75") # or your preferred labels
      )
  ) |>
  summarize(
    size = min(size),  # changed from size[1] to protect against out-of-order sizes
    .by = cut_cdf
  ) |>
  slice(-1) |>
  pivot_wider(
    names_from = -cut_cdf,
    values_from = size
  )

mutate中,我们根据累积的cdf来划分数据。在summarize中,我们取第一个福尔斯该类别的size值。这将是“刚好高于”0、0.25、0.5等的第一个值。除非你想要第0个百分位数,否则slice(-1)会将其从等式中删除。

相关问题