首页 > 解决方案 > R中多个因素的汇总统计?

问题描述

对于每款游戏,我都有如下所示的游戏数据:

ID 位置 团队 欧普 分数
0 一个 鸭子 青蛙 2
1 鸭子 青蛙 15
2 鸭子 青蛙 20
3 C 鸭子 青蛙 7
4 C 鸭子 青蛙 9.5
5 C 鸭子 青蛙 10
6 一个 青蛙 鸭子 3
7 一个 青蛙 鸭子 0.5
8 青蛙 鸭子 17
9 青蛙 鸭子 13
10 青蛙 鸭子 21
11 C 青蛙 鸭子 8.5

我想获得每个位置和团队(以及他们的对手)的平均分数,所以结果看起来像这样。

ID 位置 团队 欧普 分数 Team_A_Avg Opp_A_Avg Team_B_Avg Opp_B_Avg Team_C_Avg Opp_C_Avg
0 一个 鸭子 青蛙 2 2 1.75 17.5 17 8.8333 8.5
1 鸭子 青蛙 15 2 1.75 17.5 17 8.8333 8.5
2 鸭子 青蛙 20 2 1.75 17.5 17 8.8333 8.5
3 C 鸭子 青蛙 7 2 1.75 17.5 17 8.8333 8.5
4 C 鸭子 青蛙 9.5 2 1.75 17.5 17 8.8333 8.5
5 C 鸭子 青蛙 10 2 1.75 17.5 17 8.8333 8.5
6 一个 青蛙 鸭子 3 1.75 2 17 17.5 8.5 8.8333
7 一个 青蛙 鸭子 0.5 1.75 2 17 17.5 8.5 8.8333
8 青蛙 鸭子 17 1.75 2 17 17.5 8.5 8.8333
9 青蛙 鸭子 13 1.75 2 17 17.5 8.5 8.8333
10 青蛙 鸭子 21 1.75 2 17 17.5 8.5 8.8333
11 C 青蛙 鸭子 8.5 1.75 2 17 17.5 8.5 8.8333

解决这个问题的最佳方法是什么?

标签: rdataframe

解决方案


正如@Maurits Evers 所评论的那样,您呈现输出的方式并没有真正的意义。似乎您想要一个单独的输出,其中包含每个团队和位置的平均分数。另外,你只给了我们每一行的分数,我认为这是 的分数Team,所以我们没有对手的分数来计算平均值。我会使用dplyr summarise函数。

这是您的数据:

game = data.frame(id = c(0:11),
                  Pos = c("A", "B", "B", "C", "C", "C","A","A", "B", "B", "B","C"),
                  Team = c("Duck","Duck","Duck","Duck","Duck","Duck","Frog","Frog","Frog","Frog","Frog","Frog"),
                  Opp = c("Frog","Frog","Frog","Frog","Frog","Frog","Duck","Duck","Duck","Duck","Duck","Duck"),
                  Score = c(2, 15, 20, 7, 9.5, 10, 3, 0.5, 17, 13, 21, 8.5))

首先按位置平均:

library(dplyr)
Pos_av = game%>%    #creat a new data.frame called "Pos_av" which is taking data from "game" and piping it (%>%) into different functions 
  group_by(Pos)%>%    #first into a grouping function so we chose the variable we want to find the average for
  summarise(Pos_Mean = mean(Score))    # the we pipe into summarise function where we name our new variable (Pos_Mean) and then define the function we want to use to summarise it (in this case the mean)

这给了我们: 在此处输入图像描述

然后对于团队来说也是一样的意思:

Team_av = game%>%
  group_by(Team)%>%
  summarise(Team_Mean = mean(Score))

在此处输入图像描述

要获得每个团队和位置的平均值,请按两个变量分组:

Both_av = game%>%
  group_by(Team, Pos)%>%
  summarise(Mean = mean(Score))

在此处输入图像描述


推荐阅读