在 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
广告