【发布时间】:2025-12-29 16:15:12
【问题描述】:
我在玩babynames pkg。 group_by 命令有效,但在 summarize 之后,其中一个组从组列表中删除。
library(babynames)
babynames[1:10000, ] %>% group_by(year, name) %>% head(1)
# A tibble: 1 x 5
# Groups: year, name [1]
year sex name n prop
<dbl> <chr> <chr> <int> <dbl>
1 1880 F Mary 7065 0.07238433
这很好——两组,year, name。但是在汇总(正确尊重组)之后,name 组被删除。我错过了一个简单的错误吗?
babynames[1:10000, ] %>%
group_by(year, name) %>%
summarise(n = sum(n)) %>% head(1)
# A tibble: 1 x 3
# Groups: year [1]
year name n
<dbl> <chr> <int>
1 1880 Aaron 102
更多信息,如果相关的话:
R version 3.4.0 (2017-04-21)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS 10.13.2
dplyr_0.7.4
【问题讨论】:
-
?summarise: "一个分组级别将被删除。"。或者在the vignette 中更明确地说:“当您按多个变量分组时,每个摘要都会剥离一个分组级别。” -
在某种程度上,在汇总后删除变量是有意义的。总结后,您就已经缩小了分组变量的范围。换句话说,如果您检查
sum(!duplicated(babynames[1:10000, c("name", "year")])),您将获得与您选择babynames[1:10000, ] %>% group_by(year, name) %>% summarise(n = sum(n))时获得的行数相同的值。换句话说,对于“唯一性”,您不需要该级别的多个列,这是我们通常在分组变量中看到的。 -
当然,但是对于我之后执行的操作,我希望我的
group是name,而不是year。所以为了避免我的错误,你必须知道(a)一个组将在汇总后被丢弃,(b)要丢弃的组是group_by调用中的最后一个组。这样做是有道理的,但它不会警告你它正在发生。 -
最近有一个关于此主题的已关闭问题:dplyr::summarise removes a grouping variable 讨论了文档,但似乎得出的结论是文档还可以。我个人认为帮助文本可能更明确,例如关于删除分组变量的顺序。
-
另一个讨论这种未记录的删除顺序的问题:data is still grouped after a summarize (but not by original set of columns):“这只是用户必须记住和混淆的另一个约定。”; "
help(summarize)表示“将删除一个分组级别”用户如何知道是哪一个?"
标签: r group-by dplyr summarize