如何在 R 编程中找到数据框列的子组内的平均值?

How to find the average within the subgroups of columns of data frame in R programming?

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)

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

我们可以通过总结来做一个小组

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

使用 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