R语言合并不同长度数据表:按国家年份匹配添加税率列
R语言双表匹配合并实现方案
方法1:基础R原生merge函数(无需安装第三方包)
直接调用R内置函数即可完成匹配,代码示例:
# 仅保留两个表都匹配成功的记录(内连接) t1_merged <- merge(x = t1, y = t2, by = c("Country", "Year")) # 保留t1的全部记录,匹配不到税率的行对应税率列填充NA(左连接) t1_merged <- merge(x = t1, y = t2, by = c("Country", "Year"), all.x = TRUE)
参数说明:
x/y:指定要合并的两个表,左表为要添加税率字段的公司数据表t1,右表为税率表t2by:指定两个表用于匹配的共同字段,这里为国家和年份两个字段,需用向量传入all.x = TRUE:设置为左连接,保留左表所有行,无匹配的字段填充NA
方法2:dplyr包连接函数(语法更简洁,处理大数据效率更高)
适合使用tidyverse生态的场景,需要先加载dplyr包:
# 加载依赖包 library(dplyr) # 内连接:仅保留两个表都匹配成功的记录 t1_joined <- t1 %>% inner_join(t2, by = c("Country", "Year")) # 左连接:保留t1全部记录,匹配不到的税率列填充NA t1_joined <- t1 %>% left_join(t2, by = c("Country", "Year"))
如果两个表的匹配字段名称不一致,可以通过by参数指定对应关系,比如t1中国家字段名为Country,t2中国家字段名为Nation,则写为by = c("Country" = "Nation", "Year" = "Year")
注意事项
- 匹配前需确保两个表的匹配字段格式统一:比如年份不要一个为字符型一个为数值型,国家名称的大小写、全称/缩写规则要完全一致,否则会出现匹配失败的情况
- 如果税率表t2存在同一国家同一年份多条重复记录,合并后会导致t1的对应行重复,匹配前可先对t2去重:
t2_unique <- distinct(t2, Country, Year, .keep_all = TRUE) - 合并后可以用
nrow(t1_merged)和nrow(t1)对比行数,判断是否出现异常的行扩增
内容的提问来源于stack exchange,提问作者Noob in r
相关产品推荐
相关产品推荐

