r - 汇总分组数据框,同时维护所有作为因子向量的列
问题描述
我有一个大型数据框,其中包含几个人在一段时间内的性能数据。我想要一个包含每个人的总数/平均值的数据框,而不是每个人的每个人的表现。这是一个示例数据框:
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”,同时仍然存在这些因子向量吗?
解决方案
如果您不需要单独汇总每个球队或位置的球员成绩,那么处理多个球队/位置的另一种选择是将它们全部保留。对于每个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
推荐阅读
- r - 在 Linux 上编织的 R-Markdown 问题
- python - 如何正确安装 Face_recognition?
- c# - 如何将 JSON 字符串转换为 PSObject?
- excel - 如何将变量设置为 VBA 中 .find 函数的地址?
- pyqt5 - 如何在 Chaco 图中自动适应不同的显示分辨率?
- java - 检查字符串输入的任何部分是否不是数字
- xml - SSRS rsInvalidDataSourceCredentialSetting XML + SQL 数据源
- c++ - qt treewidget 小部件项目 QCheckBox 对齐
- input - 在 z/OS Assembler 中,我可以读取 JCL 输入流两次吗?
- laravel - 将 props 对象传递给 Vue 组件,同时保持属性的反应性