首页 > 解决方案 > 汇总分组数据框,同时维护所有作为因子向量的列

问题描述

我有一个大型数据框,其中包含几个人在一段时间内的性能数据。我想要一个包含每个人的总数/平均值的数据框,而不是每个人的每个人的表现。这是一个示例数据框:

name<-c("dwayne", "alf", "christine", "katerina", "dwayne", "christine")
team<- c("halifax", "hamilton", "calgary", "winnipeg", "halifax", "calgary")
pos<- c("left", "middle", "middle", "right", "left", "middle")
amt1<- c(4, 2, 5, 8, 5, 7)
amt2 <- c(12, 14, 13, 18, 17, 18)
perc1<- c(.55, .24, .67, .45, .34, .54)
perc2<- c(.12, .14, .16, .04, .02, .13)

df<-data_frame(team, pos, name, amt1, amt2, perc1, perc2)

到目前为止,我已经弄清楚如何使用 group_by 和 summarise_if 来完成数字列,如下所示:

tot<-df %>%
  group_by(name) %>%
  summarise_at(vars(amt1:amt2), sum)

av <- df %>%
  group_by(name) %>%
  summarise_at(vars(perc1:perc2), mean)

bnd<-cbind(tot, av)

bnd <- bnd[, !duplicated(colnames(bnd))]

但是,我的问题是:此方法返回一个不包含“pos”或“team”列的数据框。这些是分析此数据时的关键信息,但不是数字,因此在使用 summarise 函数时会被删除。如何我可以返回数据框“bnd”,同时仍然存在这些因子向量吗?

标签: rdplyr

解决方案


如果您不需要单独汇总每个球队或位置的球员成绩,那么处理多个球队/位置的另一种选择是将它们全部保留。对于每个name,将 的唯一值组合team成一个字符串,对于pos. 例如:

library(tidyverse)

# Added a couple of additional rows for illustration
df = data.frame(name=c("dwayne", "alf", "christine", "katerina", "dwayne", "christine", "christine", "dwayne"),
                team= c("halifax", "hamilton", "calgary", "winnipeg", "halifax", "calgary", "halifax","halifax"),
                pos= c("left", "middle", "middle", "right", "left", "middle", "middle","middle"),
                amt1= c(4, 2, 5, 8, 5, 7,5,5),
                amt2 = c(12, 14, 13, 18, 17, 18,17,13),
                perc1= c(.55, .24, .67, .45, .34, .54,.56,.51),
                perc2= c(.12, .14, .16, .04, .02, .13, .11, .09))

df %>% 
  group_by(name) %>% 
  mutate(team = paste(unique(team), collapse="-"),
         pos = paste(unique(pos), collapse="-")) %>% 
  group_by(name, team, pos) %>% 
  summarise_at(vars(amt1:amt2), sum)
  name      team            pos          amt1  amt2
1 alf       hamilton        middle          2    14
2 christine calgary-halifax middle         17    48
3 dwayne    halifax         left-middle    14    42
4 katerina  winnipeg        right           8    18

推荐阅读