在 R dplyr 中,为什么我需要在计数()之后取消分组()?
in R dplyr why do I need to ungroup() after I count()?
当我第一次开始使用 R 编程时,我经常使用 dplyr count().
library(tidyverse)
mtcars %>% count(cyl)
一旦我开始使用 apply
函数,我就开始 运行 遇到 count() 的问题。如果我只是将 ungroup() 添加到 count() 的末尾,问题就会消失。
我没有任何特定的可复制品可以展示。但是有人可以解释问题可能是什么,为什么 ungroup() 总是修复它,并且在之后始终使用 ungroup() 有什么缺点吗每 count(),或任何 group_by() 之后?当然,我假设我不再需要统计或汇总后的数据分组。
mtcars %>% count(cyl) %>% ungroup()
您过去 运行 遇到的问题来自 count()
的旧行为。
最高 dplyr 0.5.0,如果你这样做:
mtcars %>%
count(cyl, wt)
结果仍将按 cyl
列分组。这意味着,例如,如果您在它后面加上类似 summarize(mean(am))
的内容,您可能会为每个 cyl
获得一行,而您可能期望总共一行。如果您在计数后加上 %>% ungroup()
,问题就会得到解决。
This behavior was changed in dplyr 0.7.0(2017 年 6 月发布),这样 count()
保留其输入的分组(意味着 mtcars %>% count(wt, cyl)
现在 returns 未分组 table ).这可能就是您不再能够重现问题的原因,这意味着您不再需要在 count()
.
之后执行 ungroup()
请注意,您可能仍需要在 group_by()
和 summarize()
之后执行 ungroup()
:
mtcars %>%
group_by(cyl, wt) %>%
summarize(n = n())
returns 仍然按 cyl
:
分组的小标题
# A tibble: 30 x 3
# Groups: cyl [?]
cyl wt n
<dbl> <dbl> <int>
1 4 1.51 1
2 4 1.62 1
3 4 1.84 1
4 4 1.94 1
5 4 2.14 1
6 4 2.2 1
7 4 2.32 1
8 4 2.46 1
9 4 2.78 1
10 4 3.15 1
# ... with 20 more rows
当我第一次开始使用 R 编程时,我经常使用 dplyr count().
library(tidyverse)
mtcars %>% count(cyl)
一旦我开始使用 apply
函数,我就开始 运行 遇到 count() 的问题。如果我只是将 ungroup() 添加到 count() 的末尾,问题就会消失。
我没有任何特定的可复制品可以展示。但是有人可以解释问题可能是什么,为什么 ungroup() 总是修复它,并且在之后始终使用 ungroup() 有什么缺点吗每 count(),或任何 group_by() 之后?当然,我假设我不再需要统计或汇总后的数据分组。
mtcars %>% count(cyl) %>% ungroup()
您过去 运行 遇到的问题来自 count()
的旧行为。
最高 dplyr 0.5.0,如果你这样做:
mtcars %>%
count(cyl, wt)
结果仍将按 cyl
列分组。这意味着,例如,如果您在它后面加上类似 summarize(mean(am))
的内容,您可能会为每个 cyl
获得一行,而您可能期望总共一行。如果您在计数后加上 %>% ungroup()
,问题就会得到解决。
This behavior was changed in dplyr 0.7.0(2017 年 6 月发布),这样 count()
保留其输入的分组(意味着 mtcars %>% count(wt, cyl)
现在 returns 未分组 table ).这可能就是您不再能够重现问题的原因,这意味着您不再需要在 count()
.
ungroup()
请注意,您可能仍需要在 group_by()
和 summarize()
之后执行 ungroup()
:
mtcars %>%
group_by(cyl, wt) %>%
summarize(n = n())
returns 仍然按 cyl
:
# A tibble: 30 x 3
# Groups: cyl [?]
cyl wt n
<dbl> <dbl> <int>
1 4 1.51 1
2 4 1.62 1
3 4 1.84 1
4 4 1.94 1
5 4 2.14 1
6 4 2.2 1
7 4 2.32 1
8 4 2.46 1
9 4 2.78 1
10 4 3.15 1
# ... with 20 more rows