在 R 数据框中根据多个分组列查找多个列的平均值。


为了在 R 数据框中根据多个分组列查找多个列的平均值,我们可以使用 `summarise_at` 函数与 `mean` 函数。

例如,如果我们有一个名为 df 的数据框,其中包含两个分组列(例如 G1 和 G2)和两个数值列(例如 Num1 和 Num2),那么我们可以使用以下命令根据 G1 和 G2 查找 Num1 和 Num2 的平均值:

df%%group_by(G1,G2)%%summarise_at(vars("Num1","Num2"),mean)

示例 1

以下代码片段创建了一个示例数据框:

Gender<-sample(c("Male","Female"),20,replace=TRUE)
Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Score1<-sample(1:10,20,replace=TRUE)
Score2<-sample(1:10,20,replace=TRUE)
Score3<-sample(1:10,20,replace=TRUE)
df1<-data.frame(Gender,Class,Score1,Score2,Score3)
df1

创建了以下数据框

   Gender Class  Score1 Score2 Score3
 1 Female Second    10     9    10
 2 Male   First      4     8     3
 3 Male   First     10     6    10
 4 Male   First      3     6     3
 5 Male   Second     1     2     8
 6 Female Second     9     7     7
 7 Female First      5     3     3
 8 Male   Third      4     4     5
 9 Female Third      8    10     2
10 Male   First      3     4    10
11 Female Third      9     5    10
12 Male   Second     1     8     4
13 Female First      5     3     1
14 Male   Second     2     9    10
15 Female Third      8     8    10
16 Female Second    10     1     3
17 Female Second     8     5     4
18 Female First      2     1     2
19 Male   Third      3     1     8
20 Female Second     6     5     7

要加载 dplyr 包并根据上述创建的数据框中的性别和班级查找分数列的平均值,请将以下代码添加到上述代码片段中:

Gender<-sample(c("Male","Female"),20,replace=TRUE)
Class<-sample(c("First","Second","Third"),20,replace=TRUE)
Score1<-sample(1:10,20,replace=TRUE)
Score2<-sample(1:10,20,replace=TRUE)
Score3<-sample(1:10,20,replace=TRUE)
df1<-data.frame(Gender,Class,Score1,Score2,Score3)
library(dplyr)
df1%%group_by(Gender,Class)%%summarise_at(vars("Score1","Score2","Score3"),mean)
# A tibble: 6 x 5
# Groups: Gender [2]

输出

如果您将所有上述代码片段作为单个程序执行,它将生成以下输出:

  Gender Class Score1 Score2 Score3
   <chr  <chr  <dbl   <dbl   <dbl
1 Female First  4     2.33    2
2 Female Second 8.6   5.4     6.2
3 Female Third  8.33  7.67    7.33
4 Male   First  5 6   6.5
5 Male   Second 1.33  6.33    7.33
6 Male   Third  3.5   2.5     6.5

示例 2

以下代码片段创建了一个示例数据框:

Group1<-sample(LETTERS[1:4],20,replace=TRUE)
Group2<-sample(letters[1:4],20,replace=TRUE)
x1<-sample(1:100,20)
x2<-sample(1:100,20)
x3<-sample(1:100,20)
df2<-data.frame(Group1,Group2,x1,x2,x3)
df2

创建了以下数据框

  Group1 Group2 x1 x2 x3
 1 B     c      90 19 95
 2 D     b      98 90 9
 3 D     b      14 67 96
 4 B     d      91 52 98
 5 A     b      27 83 30
 6 A     a      29 95 27
 7 D     d      28 69 80
 8 C     b      58 72 42
 9 B     c      41 99 1
10 A     a      62 20 49
11 B     c      47 87 67
12 C     c      71 58 43
13 A     d      23 6 89
14 B     a      39 13 15
15 D     c      22 7 23
16 D     c      72 1 61
17 D     c      21 55 6
18 B     d      48 63 41
19 B     a      69 12 18
20 A     b      88 86 20

要根据上述创建的数据框中的 Group1 和 Group2 查找 x 列的平均值,请将以下代码添加到上述代码片段中:

Group1<-sample(LETTERS[1:4],20,replace=TRUE)
Group2<-sample(letters[1:4],20,replace=TRUE)
x1<-sample(1:100,20)
x2<-sample(1:100,20)
x3<-sample(1:100,20)
df2<-data.frame(Group1,Group2,x1,x2,x3)
df2%%group_by(Group1,Group2)%%summarise_at(vars("x1","x2","x3"),mean)
# A tibble: 11 x 5
# Groups: Group1 [4]

输出

如果您将所有上述代码片段作为单个程序执行,它将生成以下输出:

 Group1 Group2 x1  x2    x3
 <chr  <chr  <dbl <dbl  <dbl
 1 A    a     45.5 57.5  38
 2 A    b     57.5 84.5  25
 3 A    d     23   6     89
 4 B    a     54   12.5  16.5
 5 B    c     59.3 68.3  54.3
 6 B    d     69.5 57.5  69.5
 7 C    b     58   72    42
 8 C    c     71   58    43
 9 D    b     56   78.5  52.5
10 D    c     38.3 21    30
11 D    d     28   69    80

更新于: 2021-11-09

5K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告