在R语言纵向数据集中新增C+D行业合并行的实现方法
解决方案
首先确认你的示例数据集:
set.seed(123) df=data.frame(Country=c(rep("DEU",16),rep("FRA",16),rep("ITA",16)),Year=rep(c(rep(1,4),rep(2,4),rep(3,4),rep(4,4)),3),industry=rep(c("A","B","C","D"),12),h_emp=rnorm(48,15,3.5))
下面提供两种常用实现方式:
方法一:使用dplyr(tidyverse生态)
适合习惯管道式操作的用户:
# 加载dplyr包(未安装则先运行install.packages("dplyr")) library(dplyr) # 生成每个国家-年份下C+D行业的汇总行 cd_summary <- df %>% filter(industry %in% c("C", "D")) %>% group_by(Country, Year) %>% summarise(industry = "C+D", h_emp = sum(h_emp), .groups = "drop") # 合并原数据与汇总行,按国家、年份、行业排序整理 final_df <- df %>% bind_rows(cd_summary) %>% arrange(Country, Year, industry)
方法二:使用Base R
无需额外安装包,适合偏好原生R语法的用户:
# 筛选C和D行业观测,按国家+年份分组求和 cd_summary <- aggregate(h_emp ~ Country + Year, data = df[df$industry %in% c("C", "D"), ], FUN = sum) # 添加行业标记列,调整列顺序与原数据一致 cd_summary$industry <- "C+D" cd_summary <- cd_summary[, c("Country", "Year", "industry", "h_emp")] # 合并数据并排序 final_df <- rbind(df, cd_summary) final_df <- final_df[order(final_df$Country, final_df$Year, final_df$industry), ]
运行任意一种方法后,final_df即为包含新增C+D汇总行的完整数据集,每个国家的每个年份都会新增一行标记为"C+D"的记录,对应h_emp为该年份C和D行业的数值之和。
内容的提问来源于stack exchange,提问作者Maximilian
相关产品推荐
相关产品推荐

