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

R中dplyr重构函数中的嵌套组汇总统计

  •  1
  • rez  · 技术社区  · 2 年前

    假设我有 df 像这样:

    df <- tribble(
      ~Country, ~Gender, ~var,
      "Bangladesh", "F", 2.5,
      "Bangladesh", "M", 4.5,
      "Bangladesh", "M", 4.1,
      "US", "F", 1.7,
      "US", "F", 2.7,
      "US", "M", 3.5,
    )
    

    我们可以轻松地单独完成以下任务: 一个用于基于分组 Country Gender

    df %>% 
      group_by(Country, Gender) %>%
      reframe(
        n = n(),
        meanVar = mean(var))
    

    另一个如果我们想了解每个国家的整体价值观:

    df %>% 
      group_by(Country) %>%
      reframe(
        n = n(),
        meanVar = mean(var))
    

    但我想知道我们是否可以有一个输出,其中我们有每个国家的三行汇总统计数据: F , M All 每个国家的所有女性和男性。

    1 回复  |  直到 2 年前
        1
  •  3
  •   TimTeaFan    2 年前

    我们可以使用 bind_rows() 和变化 Gender "All" 首先,然后按分组 Country 性别 以下为:

    library(dplyr)
    
    df %>% 
      mutate(Gender = "All") %>% 
      bind_rows(., df) %>% 
      group_by(Country, Gender) %>% 
      summarise(n = n(),
                meanVar = mean(var))
    
    #> # A tibble: 6 × 4
    #> # Groups:   Country [2]
    #>   Country    Gender     n meanVar
    #>   <chr>      <chr>  <int>   <dbl>
    #> 1 Bangladesh All        3    3.7 
    #> 2 Bangladesh F          1    2.5 
    #> 3 Bangladesh M          2    4.3 
    #> 4 US         All        3    2.63
    #> 5 US         F          2    2.2 
    #> 6 US         M          1    3.5
    

    来自OP的数据

    
    df <- tribble(
      ~Country, ~Gender, ~var,
      "Bangladesh", "F", 2.5,
      "Bangladesh", "M", 4.5,
      "Bangladesh", "M", 4.1,
      "US", "F", 1.7,
      "US", "F", 2.7,
      "US", "M", 3.5,
    )
    

    创建于2023-04-02 reprex v2.0.2

    推荐文章