【问题标题】:How to find the average within the subgroups of columns of data frame in R programming? [duplicate]如何在R编程中找到数据框列的子组内的平均值? [复制]
【发布时间】:2021-03-16 23:56:32
【问题描述】:
trt<-c(1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3 ,3)
plant<-c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5 ,5, 5, 5)
change<-c(-9, -6, -4 , 7 , 4, 11, 18,  5, 29, 10, 29, 36, 10,  9,  4, -1 ,14 ,16 , 9 , 0, -2,  6,14, 18, -6, 13, 11, -1,  7, 15)
df<-data.frame(trt,plant,change)

我想要这样的结果——前 2 个条目在 trt 中相同的变化的平均值。 我的数据有 30 行我想要 15 结果,请帮助

【问题讨论】:

    标签: r dataframe grouping average calculated-columns


    【解决方案1】:

    使用aggregate 的基本 R 解决方案

    > aggregate(change ~ ., df, mean)
       trt plant change
    1    1     1   -7.5
    2    2     1    1.5
    3    3     1    7.5
    4    1     2   11.5
    5    2     2   19.5
    6    3     2   32.5
    7    1     3    9.5
    8    2     3    1.5
    9    3     3   15.0
    10   1     4    4.5
    11   2     4    2.0
    12   3     4   16.0
    13   1     5    3.5
    14   2     5    5.0
    15   3     5   11.0
    

    【讨论】:

      【解决方案2】:

      我们可以通过总结来分组

      library(dplyr)
      df %>%
          group_by(trt, plant) %>% 
          summarise(avg_change = mean(change, na.rm = TRUE), .groups = 'drop') %>%
          arrange(plant)
      

      -输出

      # A tibble: 15 x 3
      #     trt plant avg_change
      #   <dbl> <dbl>      <dbl>
      # 1     1     1       -7.5
      # 2     2     1        1.5
      # 3     3     1        7.5
      # 4     1     2       11.5
      # 5     2     2       19.5
      # 6     3     2       32.5
      # 7     1     3        9.5
      # 8     2     3        1.5
      # 9     3     3       15  
      #10     1     4        4.5
      #11     2     4        2  
      #12     3     4       16  
      #13     1     5        3.5
      #14     2     5        5  
      #15     3     5       11  
      

      或使用collapse

      library(collapse)
      df %>%
        fgroup_by(trt, plant) %>%
        fsummarise(avg_change = fmean(change)) %>%
        roworder(plant)
      

      -输出

      #   trt plant avg_change
      #1    1     1       -7.5
      #2    2     1        1.5
      #3    3     1        7.5
      #4    1     2       11.5
      #5    2     2       19.5
      #6    3     2       32.5
      #7    1     3        9.5
      #8    2     3        1.5
      #9    3     3       15.0
      #10   1     4        4.5
      #11   2     4        2.0
      #12   3     4       16.0
      #13   1     5        3.5
      #14   2     5        5.0
      #15   3     5       11.0
      

      【讨论】:

        猜你喜欢
        • 2018-04-05
        • 2016-10-20
        • 2021-04-20
        • 2017-11-11
        • 2020-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        相关资源
        最近更新 更多