【问题标题】:Calculating summary statistics for a data frame with dplyr using group_by() [duplicate]使用 group_by() 计算具有 dplyr 的数据框的汇总统计信息 [重复]
【发布时间】:2020-09-13 02:40:54
【问题描述】:

假设我有一个关于多个幼儿园人口的大型数据集,我想计算一些汇总数据,例如每所学校的平均年龄。数据框的结构使得每所学校都有 3-5 岁的每个年龄的男性和女性人口。这是一个示例数据集:

library(dplyr)
school <- c("Alpha", "Alpha", "Alpha", "Alpha", "Alpha", "Alpha", "Beta", "Beta", "Beta", "Beta", "Beta", "Beta")
age <- c(3, 3, 4, 4, 5, 5, 3, 3, 4, 4, 5, 5)
gender <- c("M", "F", "M", "F", "M", "F", "M", "F", "M", "F", "M", "F") 
df <- data.frame(school, age, gender, pop, stringsAsFactors = TRUE)
test_df <- data.frame(School = school,
           Age = age,
           Gender = gender,
           Population = as.integer(rnorm(n = 12, mean = 30, sd = 5)))

我已经使用 group_by() 和 summarise() 函数对每个年龄值的 M 和 F 人口进行总计,

test_df2 <- test_df %>% group_by(School, Age) %>% summarise(Population = sum(Population))

注意:我在这里收到一条警告消息:

summarise() 取消分组输出(用.groups 参数覆盖)

但结果表是我想要的,所以不确定这是否重要。

但是我似乎无法从这里开始计算每所学校的平均年龄。我试过了

test_df2 %>% group_by(School) %>% summarise(Mean_Age = (Age*Population/sum(Population)))

但结果不是我所期望的 - 它是对每个年龄人口应用平均计算,而不是对整个学校。我正在尝试为每所学校制作一个平均年龄的表格。

对不起,如果我错过了一些非常基本的东西 - 我还是 r 的新手。感谢您的帮助!

【问题讨论】:

    标签: r


    【解决方案1】:

    我认为你正在寻找的是加权平均值,R 有它的默认功能。

    library(dplyr)
    test_df2 %>% 
      group_by(School) %>% 
      summarise(Mean_Age = weighted.mean(Age, Population))
    
    #  School Mean_Age
    #  <chr>     <dbl>
    #1 Alpha      3.97
    #2 Beta       4.08
    

    如果没有该函数,公式是Age * Population 的总和除以Population 的总和。

    test_df2 %>% 
      group_by(School) %>% 
      summarise(Mean_Age = sum(Age * Population)/sum(Population))
    

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2014-04-09
      • 2019-08-18
      • 2017-07-01
      • 2018-08-11
      • 2023-02-21
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多