首页 > 解决方案 > 有没有办法在 R 中一次自动平均多个治疗?

问题描述

非常抱歉,如果这是一个重新发布的问题,我检查了搜索引擎并找不到我正在寻找的答案。假设我有以下数据集:

Plot Plant Count
1   101     1     9
2   101     2    15
3   101     3     5
4   101     4    15
5   101     5    26
6   102     1     9
7   102     2    26
8   102     3     9
9   102     4    15
10  102     5    17
11  103     1    12
12  103     2     6
13  103     3    22
14  103     4    12
15  103     5     6

我想平均每个地块的 5 个植物之间的“计数”数。但是,在我的真实数据集中,我有超过 3 个图。有没有办法编写我的代码,以便它一次自动平均我的所有图?我想学习编写一个代码,让我尽可能有效地获得每个情节的平均值。任何帮助将不胜感激。

我对stackoverflow相当陌生,并且不是最强大的R,所以如果我在格式或类似方面犯了错误,请告诉我。谢谢你的时间!

标签: r

解决方案


尝试dplyr使用group_by()and summarise()。这里的代码:

library(dplyr)
#Data
newdf <- df %>% group_by(Plot) %>% summarise(Avg=mean(Count))

输出:

# A tibble: 3 x 2
   Plot   Avg
  <int> <dbl>
1   101  14  
2   102  15.2
3   103  11.6

使用的一些数据:

#Data
df <- structure(list(Plot = c(101L, 101L, 101L, 101L, 101L, 102L, 102L, 
102L, 102L, 102L, 103L, 103L, 103L, 103L, 103L), Plant = c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), Count = c(9L, 
15L, 5L, 15L, 26L, 9L, 26L, 9L, 15L, 17L, 12L, 6L, 22L, 12L, 
6L)), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))

如果你想保持你的变量mutate()以这种方式使用:

#Code
newdf <- df %>% group_by(Plot) %>% mutate(Avg=mean(Count))

输出:

# A tibble: 15 x 4
# Groups:   Plot [3]
    Plot Plant Count   Avg
   <int> <int> <int> <dbl>
 1   101     1     9  14  
 2   101     2    15  14  
 3   101     3     5  14  
 4   101     4    15  14  
 5   101     5    26  14  
 6   102     1     9  15.2
 7   102     2    26  15.2
 8   102     3     9  15.2
 9   102     4    15  15.2
10   102     5    17  15.2
11   103     1    12  11.6
12   103     2     6  11.6
13   103     3    22  11.6
14   103     4    12  11.6
15   103     5     6  11.6

或使用base R

#Base R
newdf <- aggregate(Count~Plot,data=df,mean)

输出:

  Plot Count
1  101  14.0
2  102  15.2
3  103  11.6

推荐阅读