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

R语言实现多数据帧列表合并 按维度统计职位人数并移除零值列

分维度职位人数统计方案(适配百万级数据量)

核心需求

  • 统计维度:UF区域、性别、年份
  • 统计指标:从事J1、J2、J3三类职位的人数
  • 数据映射规则:test.frame1对应第1年y1数据,test.frame2对应第2年y2数据,后续年份按序号顺延
  • 输出要求:生成可直接展示计数逐年变化趋势的宽表,自动移除所有维度下计数全为0的职位列
  • 性能要求:适配百万级数据量的处理效率

原有代码问题

原代码混合加载plyr与dplyr易出现函数命名冲突,分组计数、结果拼接逻辑未正确保留维度标签,缺少全零列过滤能力,且拆分拼接的循环逻辑处理大数据时效率偏低。

优化实现代码

# 加载依赖包:注意不要同时加载plyr,避免和dplyr的分组函数产生冲突
# dplyr为C++实现的向量化计算框架,处理百万级数据效率远高于plyr
library(dplyr)
library(tidyr)
library(purrr)

# --------------------------
# 测试数据构造(与提供的示例一致)
# --------------------------
set.seed(4)
UF <- c("North", "South", "West", "East","North", "South", "West", "East","North", "South", "West", "East")
Gender <- c("Woman", "Woman", "Woman", "Woman","Man", "Man", "Man", "Man","Man", "Woman", "Man", "Woman")
Job <- c("J1","J1", "J2", "J2", "J3", "J3","J1","J1", "J2", "J2", "J3", "J3")
Wage1 <- lapply(1,function(x){sample(1:150,12,replace = T)})
Wage2 <- lapply(1,function(x){sample(1:150,12,replace = T)})
Wage3 <- lapply(1,function(x){sample(1:150,12,replace = T)})
test.frame1 <- data.frame(UF, Gender, Wage1, Job)
test.frame2 <- data.frame(UF, Gender, Wage2, Job)
test.frame3 <- data.frame(UF, Gender, Wage3, Job)
names(test.frame1)[3] <- 'Wage'
names(test.frame2)[3] <- 'Wage'
names(test.frame3)[3] <- 'Wage'

data_list <- list(test.frame1, test.frame2, test.frame3)

# --------------------------
# 核心统计逻辑
# --------------------------
# 1. 批量为每年数据添加年份标签,合并为总表
year_tags <- paste0("y", seq_along(data_list))
all_year_data <- map2_dfr(data_list, year_tags, ~.x %>% mutate(year = .y))

# 2. 按三个维度分组统计人数
count_df <- all_year_data %>%
  count(UF, Gender, Job, year, name = "count")

# 3. 转换为逐年趋势宽表,过滤全零列
DFEtnia <- count_df %>%
  pivot_wider(
    names_from = c(Gender, Job, year),
    values_from = count,
    values_fill = 0 # 无对应记录的位置填充0
  ) %>%
  # 自动移除所有计数总和为0的职位列
  select(where(~ is.numeric(.) && sum(.) != 0))

# 打印输出结果
print(DFEtnia)

逻辑说明

  • 全流程采用向量化计算,无嵌套循环拆分操作,百万级数据可在数秒内完成计算
  • 自动为数据集匹配年份标签,无需手动逐表修改字段
  • 宽表列名格式为性别_职位_年份,可直接用于逐年趋势对比,匹配目标表格结构
  • 缺失计数自动补0,避免空值影响后续分析
  • 全零列过滤逻辑自动识别数值列,无需手动指定要删除的职位字段,适配职位类型动态变化的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:48:17