代码之家  ›  专栏  ›  技术社区  ›  TarJae

如何在一次运行中对多个列计数使用计数

  •  1
  • TarJae  · 技术社区  · 10 月前

    通常,当我对数据帧中的列进行计数时,我使用 count() 的函数 dplyr 包裹

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

    mtcars %>% 
      count(am) 
    

    mtcars %>% 
      count(gear) 
    

    等 现在我想数数 cyl, am, gear 在一次运行中。

    注意:我不是说

    mtcars %>%
     count(cyl, am, gear)
    

    到目前为止,我的工作方法是:

    
    library(dplyr)
    library(tidyr)
    
    mtcars %>% 
      count(am) %>% 
    bind_rows(mtcars %>% 
                count(cyl)) %>% 
      bind_rows(mtcars %>% 
                  count(gear)) %>% 
    pivot_longer(-n, 
                 values_drop_na = TRUE) %>% 
      unite("variable", c("name", "value")) %>% 
      relocate(variable, n)
    
      variable     n
      <chr>    <int>
    1 am_0        19
    2 am_1        13
    3 cyl_4       11
    4 cyl_6        7
    5 cyl_8       14
    6 gear_3      15
    7 gear_4      12
    8 gear_5       5
    

    我想知道是否有更简洁的方法来实现这一点。

    1 回复  |  直到 10 月前
        1
  •  3
  •   r2evans    10 月前

    也许旋转并计数?

    library(dplyr)
    library(tidyr) # pivot_longer
    select(mtcars, am, cyl, gear) |>
      pivot_longer(cols = everything()) |>
      count(name, value)
    # # A tibble: 8 × 3
    #   name  value     n
    #   <chr> <dbl> <int>
    # 1 am        0    19
    # 2 am        1    13
    # 3 cyl       4    11
    # 4 cyl       6     7
    # 5 cyl       8    14
    # 6 gear      3    15
    # 7 gear      4    12
    # 8 gear      5     5
    

    如果需要,可以将这些名称粘贴在一起进行“清理”。