sta*_*tor 10 group-by r lapply sapply dplyr
当我第一次开始在RI中编程时,通常会使用dplyr count().
library(tidyverse)
mtcars %>% count(cyl)
Run Code Online (Sandbox Code Playgroud)
一旦我开始使用apply函数,我开始遇到count()的问题.如果我简单地将ungroup()添加到我的计数结束(),那么问题就会消失.
我没有任何特别的可复制品来展示.但有人可以解释问题可能是什么,为什么ungroup()总是修复它,并且在每次count()之后或者在任何group_by()之后一直使用ungroup()有任何缺点吗?当然,我假设我不再需要在计算或汇总后对数据进行分组.
mtcars %>% count(cyl) %>% ungroup()
Run Code Online (Sandbox Code Playgroud)
Dav*_*son 14
您曾经遇到过的问题来自于旧的行为count().高达dplyr 0.5.0,如果你这样做:
mtcars %>%
count(cyl, wt)
Run Code Online (Sandbox Code Playgroud)
结果仍将按cyl列分组.这意味着,例如,如果您使用类似的东西summarize(mean(am)),那么cyl当您可能预期整行时,您将获得每行一行.如果您%>% ungroup()在计票之后放置,问题将得到解决.
此行为在dplyr 0.0.0.0(2017年6月发布)中已更改,因此count()保留了其输入的分组(意味着mtcars %>% count(wt, cyl)现在返回未分组的表).这可能就是为什么你不再能够重现这些问题的原因,这意味着你不再需要这样做ungroup()了count().
请注意,您可能仍需要ungroup()在a group_by()和之后执行summarize():
mtcars %>%
group_by(cyl, wt) %>%
summarize(n = n())
Run Code Online (Sandbox Code Playgroud)
返回仍然按以下分组的tibble 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
Run Code Online (Sandbox Code Playgroud)