如何在R语言中用summarise过滤统计分组表格中指定类别出现次数?
问题解决:按年份分组统计男性数量
你的代码无法运行的原因有两个:
- R是大小写敏感的,数据框中的分组列名为
Year(大写Y),但你写的是year(小写),导致分组失败。 n()函数仅用于统计当前分组的总行数,不支持传入条件参数来筛选计数。
针对你的需求,正确的做法是用sum()函数统计符合Sex == "Male"的行数——逻辑向量中TRUE会被当作1,FALSE当作0,求和后就是对应年份的男性数量。加上na.rm = TRUE还能处理实际数据中可能存在的NA值。
完整代码
首先修正你的数据框定义(原代码缺少闭合括号):
df <- data.frame(Identifier = c("A","B","C"), Year = c("2020","2020","2019"), Sex = c("Male","Male","Female"))
然后执行分组统计:
library(dplyr) df %>% group_by(Year) %>% summarise(Number_males = sum(Sex == "Male", na.rm = TRUE))
运行结果
# A tibble: 2 × 2 Year Number_males <chr> <int> 1 2019 0 2 2020 2
扩展:处理缺失年份(可选)
如果你的实际数据中存在某些年份没有记录,但需要在结果中显示该年份男性数量为0,可以结合tidyr::complete()补充缺失分组:
library(dplyr) library(tidyr) df %>% group_by(Year) %>% summarise(Number_males = sum(Sex == "Male", na.rm = TRUE)) %>% complete(Year = unique(df$Year), fill = list(Number_males = 0))
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

