【问题标题】:Create a Pivot Table of Two Categorical and Numerical Variables创建两个分类和数值变量的数据透视表
【发布时间】:2021-06-03 14:25:36
【问题描述】:

我有以下假设的数据框

Region <- c("District A", "District B","District A","District A","District B")
Gender <- c("Male","Male","Female", "Male","Female")
Age <- c(20, 21, 23, 34, 22)
AmountSold <- c(50, 10, 20, 4, 12)
RegionSales <- data.frame(Region, Gender, Age, AmountSold)

我想创建一个数据透视表或表格,显示每个性别和地区的销售量平均值以及每个性别和地区的年龄平均值。我如何在 R 中做到这一点?

【问题讨论】:

    标签: r dplyr pivot-table


    【解决方案1】:

    使用dplyr,另一种选择是指定across中的变量

    library(dplyr)
    RegionSales %>%
        group_by(Region, Gender) %>%
        summarise(across(c(Age, AmountSold),
                 ~ mean(., na.rm = TRUE), .names = "mean_{.col}"))
    

    【讨论】:

    • 如果我想添加其他集中趋势度量,例如中位数、最小值、最大值和范围。我该怎么做?
    • @Muli 很简单,只要summarise(across(c(Age, AmountSold), list(mean = ~ mean(., na.rm = TRUE), median = ~ median(., na.rm = TRUE), min = ~ min(., na.rm = TRUE), max = ~ max(., na.rm = TRUE))) range 实际上是最小/最大
    【解决方案2】:

    这将是我使用 dplyr 包的方法:

    library(dplyr)
    
    RegionSales %>%
      group_by(Region, Gender) %>%
      summarize(mean_age = mean(Age), mean_amount = mean(AmountSold))
    

    输出:

    # A tibble: 4 x 4
    # Groups:   Region [2]
      Region     Gender mean_age mean_amount
      <chr>      <chr>     <dbl>       <dbl>
    1 District A Female       23          20
    2 District A Male         27          27
    3 District B Female       22          12
    4 District B Male         21          10
    

    忽略NA 值的选项:

    RegionSales %>%
      group_by(Region, Gender) %>%
      summarize(mean_age = mean(Age, na.rm = T),
                mean_amount = mean(AmountSold, na.rm = T))
    

    【讨论】:

    • 我正在尝试使用类似于结构的数据框来复制它,但在汇总统计数据中,我得到的是 NA,而不是与集中趋势度量相关的值。可能是什么问题?我的 DF 有 NA 值
    【解决方案3】:

    使用aggregate 的基本选项可能会有所帮助

    > aggregate(. ~ Region + Gender, RegionSales, mean)
          Region Gender Age AmountSold
    1 District A Female  23         20
    2 District B Female  22         12
    3 District A   Male  27         27
    4 District B   Male  21         10
    

    【讨论】:

      猜你喜欢
      • 2022-12-28
      • 1970-01-01
      • 2018-03-26
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多