【问题标题】:Divide data frame by deciles and compute mean and median for each decile in each year R将数据框除以十分位数并计算每年 R 中每个十分位数的平均值和中位数
【发布时间】:2023-01-20 11:47:29
【问题描述】:

鉴于以下数据结构,我想将“类别”按“值”给定的每一年的十分位数进行划分,并计算每年和每个十分位数变量“值”的平均值和中位数。

df <- data.frame(Category = rep(LETTERS[1:15], each = 6),
                 Year = rep(2010:2015, 15),
                 value = runif(90, 50, 100))

我试过这个,但后来我在计算每个十分位数每年的平均值和中位数时遇到了问题(虽然不确定这是 100% 正确的)。

a <- df %>%
  mutate(quantile = ntile(value, 10))

我想按年获得一个数据框,并用每年每个十分位数的平均值和中位数进行十分位数

为了将 df 分成十分位数,我尝试了这个,这显然给了我一个结果(不确定是否 100% 正确)

a <- df %>%
  mutate(quantile = ntile(value, 10))

为了计算均值,我尝试了两种方法但都失败了:

使用数据框

w <- setDT(a)[, Mean := mean(value), by = .(Year, quantile)][]

并使用 dplyr

z <- a %>% group_by(Year,quantile) %>% summarise (x = mean(value))

结果,我正在寻找的是一个数据框,每年一行,十分位数及其平均值和中间值。

这就是我需要输出的方式(在 Mean 和 Median 列中有相应的值,并且十分位数一直到 10):

【问题讨论】:

    标签: r


    【解决方案1】:

    这个怎么样:

    library(dplyr)
    df <- data.frame(Category = rep(LETTERS[1:15], each = 6),
                     Year = rep(2010:2015, 15),
                     value = runif(90, 50, 100))
    
    df %>%
      group_by(Year) %>% 
      mutate(decile = ntile(value, 10)) %>% 
      group_by(Year, decile) %>% 
      summarise(mean = mean(value), 
                median = median(value))
    #> `summarise()` has grouped output by 'Year'. You can override using the
    #> `.groups` argument.
    #> # A tibble: 60 × 4
    #> # Groups:   Year [6]
    #>     Year decile  mean median
    #>    <int>  <int> <dbl>  <dbl>
    #>  1  2010      1  52.7   52.7
    #>  2  2010      2  59.7   59.7
    #>  3  2010      3  64.6   64.6
    #>  4  2010      4  70.0   70.0
    #>  5  2010      5  72.2   72.2
    #>  6  2010      6  73.8   73.8
    #>  7  2010      7  76.6   76.6
    #>  8  2010      8  92.3   92.3
    #>  9  2010      9  94.8   94.8
    #> 10  2010     10  97.9   97.9
    #> # … with 50 more rows
    

    reprex package (v2.0.1) 创建于 2023-01-19

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      相关资源
      最近更新 更多