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

R语言合并多数据框避免重复列与数据错位问题咨询

R多Excel表合并问题解决方案

问题原因

  • 重复公共列:合并时仅指定ultorg作为唯一匹配键,另外两个公共列sector、subind未被纳入匹配键,合并时会自动加.x/.y后缀保留多份,导致重复列。
  • 董事会数据错误填充:PAC、Lobby为「企业-年份」维度的面板数据,单个企业对应多年份多行数据,仅用企业名称作为匹配键时,单个企业的所有年份行都会匹配到BoardData中该企业唯一的2015年数据,导致非2015年的行被错误填充。
  • 补充:原代码最后一次合并用了中文引号,会直接触发语法报错。

解决代码

默认前提:PAC、Lobby表中均有名为year的年份列,同一个企业对应的sector、subind值在三个表中完全一致。

library(tidyverse)
library(readxl)

setwd("~/Desktop/thesis")

# 读入数据
PAC <- read_excel("PAC.xlsx")
Lobby <- read_excel("Lobby.xlsx")
BoardData <- read_excel("BoardData.xlsx")

# 预处理BoardData:如果本身没有year列,手动添加2015年份标识
# 如果本身已有year列且值均为2015,可删除下面这行代码
BoardData <- BoardData %>% mutate(year = 2015)

# 合并数据,匹配键包含所有公共列+年份,未匹配到的行自动填充NA
alldata <- PAC %>% 
  left_join(Lobby, by = c("ultorg", "sector", "subind", "year")) %>% 
  left_join(BoardData, by = c("ultorg", "sector", "subind", "year"))

特殊情况适配

如果三个表中同一个企业对应的sector、subind值存在差异,可选择以PAC表的对应值为基准,提前删除另外两个表的这两列即可,合并代码调整为:

# 提前删除冗余公共列
Lobby <- Lobby %>% select(-sector, -subind)
BoardData <- BoardData %>% select(-sector, -subind) %>% mutate(year = 2015)

# 仅用企业+年份作为匹配键
alldata <- PAC %>% 
  left_join(Lobby, by = c("ultorg", "year")) %>% 
  left_join(BoardData, by = c("ultorg", "year"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:15:02