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

如何高效统计年份、种族、族裔多维度数据的频数?

高效统计年份-种族-族裔组合频数的方法

问题背景

我有一个敏感数据集,因此制作了以下模拟数据集用于展示:

df <- data.frame(
  Year = c("2010", "2010", "2010", "2011", "2011", "2012", "2013", "2013", "2013"),
  Race = c("White", "White", "Asian", "White", "Black", "Black", "Unknown", "Unknown", "White"),
  Ethnicity = c("Hispanic", "Hispanic", "Not Hispanic", "Hispanic", "Not Hispanic", "Not Hispanic", "Unknown", "Hispanic", "Not Hispanic")
)

实际数据集覆盖2010-2021年共12个年份,包含约6-7个种族类别,以及3种族裔选项(Hispanic/Latino、Not Hispanic/Latino、Unknown)。

我需要统计每一组年份、种族、族裔组合的频数,但目前用自定义函数逐个调用的方式需要写200+行代码,效率极低,尝试for循环也没成功,希望得到高效实现方法。

原自定义函数(存在语法错误):

raceethfunc <- function(x,y,z){
df %>% filter(Race == x & Ethnicity == y and Year = z) %>%
nrow()
}

H_white2010 <- raceethfunc(x = "White", y = "Hispanic or Latino", z = "2010")
H_white2011 <- raceethfunc(x = "White", y = "Hispanic or Latino", z = "2011")
H_white2012 <- raceethfunc(x = "White", y = "Hispanic or Latino", z = "2012")

高效解决方案

不需要手动编写每一组的统计代码,以下两种方法可以一次性生成所有组合的频数:

方法1:使用dplyr的count()函数(推荐,代码简洁)

dplyr包的count()函数可以直接按指定列分组并统计频数,自动包含所有非零频数的组合;如果需要补全所有可能的组合(包括频数为0的),可以搭配tidyr::complete():

library(dplyr)
library(tidyr)

# 统计所有非零频数的组合
freq_table <- df %>%
  count(Year, Race, Ethnicity, name = "Frequency")

# 补全所有可能的组合(频数为0的也显示)
freq_table_full <- df %>%
  count(Year, Race, Ethnicity, name = "Frequency") %>%
  complete(Year, Race, Ethnicity, fill = list(Frequency = 0))

方法2:使用基础R的table()函数

基础R的table()函数可以快速生成多维交叉频数表,结果可转为数据框格式方便阅读:

# 生成频数表(多维数组格式)
freq_table <- table(df$Year, df$Race, df$Ethnicity)

# 转为数据框格式
freq_df <- as.data.frame(freq_table, responseName = "Frequency")

原函数的语法错误修正(供参考)

如果一定要保留自定义函数,需修正两处基础语法错误:

  • R中逻辑与运算符是&,不是and
  • 相等判断用==,赋值才用=
    修正后的函数:
raceethfunc <- function(x,y,z){
  df %>% filter(Race == x & Ethnicity == y & Year == z) %>% nrow()
}

但依然不推荐这种手动调用的方式,效率过低。

新手提示

  • 优先使用dplyr的分组统计方法,代码直观,后续排序、筛选等二次处理更便捷
  • 若需要处理缺失类别或补全所有组合,tidyr::complete()是实用工具

内容的提问来源于stack exchange,提问作者shollaback

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:44:55