代码之家  ›  专栏  ›  技术社区  ›  stackinator Brenton Wiernik

在r dpylr中,为什么我需要在count()之后取消分组()?

  •  10
  • stackinator Brenton Wiernik  · 技术社区  · 7 年前

    当我第一次在R中开始编程时,我经常使用dplyr 计数() .

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

    一旦我开始使用 apply 我开始遇到问题的函数 计数() . 如果我简单地加上 取消分组() 直到我的 计数() 问题会消失的。

    我没有什么特别的复制品可以展示。但有人能解释一下问题可能是什么,为什么 取消分组() 总是修复它,并且持续使用它有什么缺点吗? 取消分组() 之后每 计数() 或在任何之后 分组依据() ?当然,我假设在统计或汇总数据后不再需要对其进行分组。

    mtcars %>% count(cyl) %>% ungroup()
    
    1 回复  |  直到 7 年前
        1
  •  13
  •   David Robinson    7 年前

    你以前遇到的问题是 count() . 最高可达dplyr 0.5.0,如果您这样做:

    mtcars %>%
      count(cyl, wt)
    

    结果仍将按 cyl 列。例如,这意味着,如果你跟在后面 summarize(mean(am)) ,你会得到一排的 共青团 当你可能期望一行的时候。如果你把问题解决了 %>% ungroup() 在数数之后。

    This behavior was changed in dplyr 0.7.0 (2017年6月发布),以便 计数() 保留其输入的分组(意思是 mtcars %>% count(wt, cyl) 现在返回一个未分组的表)。这很可能就是你不再能够重现问题的原因,这意味着你不再需要这样做。 ungroup() A之后 计数() .


    请注意,您可能仍然需要这样做 取消分组() A之后 group_by() summarize() :

    mtcars %>%
      group_by(cyl, wt) %>%
      summarize(n = n())
    

    返回一个仍按 共青团 :

    # 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
    
    推荐文章