【问题标题】:Using R dplyr to summarize data使用 R dplyr 汇总数据
【发布时间】:2020-11-24 04:33:42
【问题描述】:

我有这个 df,其中有 3 个列:年份、治疗组/对照组和双变量。

year    T/C      Var
<int>   <int>   <dbl>
1992    0       15.5
1992    0       0.0
1993    0       17.5
1993    0       20.5
1992    1       40.5
1992    1       2.0
1993    1       27.0
1993    1       19.5

我可以做一个与此类似的表格,其中列是处理/控制,行是年份,单元格由该组的 var 的平均值填充?

        0                       1
    
1992    mean(var(0, 1992))      mean(var(1, 1992))
1993    mean(var(0, 1993))      mean(var(1, 1993))

我尝试了 group_by 并像这样总结,但我不知道如何使 T/C 成为列。

df %>% group_by(year, T/C) %>% summarise(across(everything(), list(mean)))

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以使用pivot_wider获取宽格式数据并将函数mean应用于数据中的每组值。

    library(tidyr)
    result <- pivot_wider(df, names_from = T.C, values_from = Var, values_fn = mean)
    result
    
    #   year   `0`   `1`
    #  <int> <dbl> <dbl>
    #1  1992  7.75  21.2
    #2  1993 19     23.2
    

    data.table 中,您可以使用dcast

    library(data.table)
    dcast(setDT(df), year~T.C, value.var = 'Var', fun.aggregate = mean)
    

    数据

    df <- structure(list(year = c(1992L, 1992L, 1993L, 1993L, 1992L, 1992L, 
    1993L, 1993L), T.C = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L), Var = c(15.5, 
    0, 17.5, 20.5, 40.5, 2, 27, 19.5)), class = "data.frame", row.names = c(NA, -8L))
    

    【讨论】:

      【解决方案2】:

      包:

      library('dplyr')
      library('tidyr')
      

      数据:

      table <- read.table(header=TRUE, text="
        year    T/C      Var
        1992    0       15.5
      1992    0       0.0
      1993    0       17.5
      1993    0       20.5
      1992    1       40.5
      1992    1       2.0
      1993    1       27.0
      1993    1       19.5
      ")
         
      

      使用管道将group_by和tidyr中的spread结合起来是另一种解决这个问题的方法。但是,它似乎比 Ronak Shah 的响应要长一点,它确实具有相同的结果。

      table <- table %>%
        mutate(T.C = as.character(T.C)) %>%
        group_by(year, T.C) %>%
        summarise(Mean_Var = mean(Var)) %>%
        spread(T.C, Mean_Var)
      

      结果:

      # A tibble: 2 x 3
      # Groups:   year [2]
         year   `0`   `1`
        <int> <dbl> <dbl>
      1  1992  7.75  21.2
      2  1993 19     23.2
      

      【讨论】:

        猜你喜欢
        • 2018-04-23
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 2016-02-07
        • 2021-11-16
        • 1970-01-01
        • 2021-03-03
        相关资源
        最近更新 更多