在R dplyr中,为什么我在count()之后需要ungroup()?

时间:2018-07-18 14:11:49

标签: r group-by dplyr lapply sapply

当我第一次开始用R编程时,我经常会使用dplyr count()

library(tidyverse)    
mtcars %>% count(cyl)

一旦我开始使用apply函数,我就开始遇到 count()的问题。如果我只是在 count()的末尾添加 ungroup(),问题就会消失。

我没有任何可复制的东西要显示。但是有人可以解释这个问题可能是什么,为什么 ungroup()总是可以解决这个问题,并且在每个 count()之后一致使用 ungroup()有任何弊端。 ),还是在任何 group_by()之后?当然,我假设我不再需要对数据进行计数或汇总后进行分组。

mtcars %>% count(cyl) %>% ungroup()

1 个答案:

答案 0 :(得分:13)

您以前遇到的问题来自NOTICE Undefined index: price on line number 28 NOTICE Undefined index: price on line number 28 Array ( [class] => Array ( [name] => class 1 [price] => 30 ) [late_fine] => Array ( [name] => late fine [price] => 90 ) ) 的旧行为。 如果您这样做,则最高为dplyr 0.5.0:

count()

结果仍将按mtcars %>% count(cyl, wt) 列分组。举例来说,这意味着如果您跟随cyl之类的内容,则可能会希望整体上排成一行,而每个summarize(mean(am))都会得到一行。如果将cyl放在计数之后,该问题将得到解决。

This behavior was changed in dplyr 0.7.0(于2017年6月发布),这样%>% ungroup()保留了其输入的分组(意味着count()现在将返回未分组的表)。这可能是为什么您不再能够重现问题的原因,并且这意味着您不再需要在mtcars %>% count(wt, cyl)之后执行ungroup()


请注意,您可能仍需要在count()ungroup()之后执行group_by()

summarize()

返回仍按mtcars %>% group_by(cyl, wt) %>% summarize(n = n()) 分组的小标题:

cyl