You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:15:50