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
相关产品推荐
相关产品推荐

