如何在R语言中执行SQL左连接(Left Join)操作?
在R中实现SQL左连接(Left Join)的等价方法
刚接触R的时候,确实会好奇怎么把熟悉的SQL操作转换成R代码,左连接是很常用的关联操作,这里给你两种最常用的实现方式,结合你提供的数据来演示:
首先先把你给出的数据拆分成两个示例数据集(假设你想把2015年的数据和2016年的数据按「学校ID+年级」做左连接):
# 2015年的数据(左表) df_2015 <- data.frame( School = c(610534, 610534), Year = c(2015, 2015), Grade = c("Mathematics Grade 3", "Mathematics Grade 4"), students = c(57, 60), math_approached = c("5.3%", "8.3%"), math_metorexceeded = c("94.7%", "91.7%") ) # 2016年的数据(右表) df_2016 <- data.frame( School = c(610534, 610534, 610534), Year = c(2016, 2016, 2016), Grade = c("Mathematics Grade 3", "Mathematics Grade 4", "Mathematics Grade 5"), students = c(57, 60, 59), math_approached = c("5.3%", "8.3%", "6.8%"), math_metorexceeded = c("94.7%", "91.7%", "93.2%") )
方法1:使用dplyr包的left_join()(推荐)
dplyr是R中数据处理的主流工具,语法和SQL非常接近,可读性极强,新手也能快速上手。
代码示例:
# 先安装并加载dplyr(首次使用需运行install.packages("dplyr")) library(dplyr) # 左连接:以df_2015为左表,按School和Grade字段匹配 left_join_result <- df_2015 %>% left_join(df_2016, by = c("School", "Grade"), suffix = c("_2015", "_2016"))
关键参数解释:
by:对应SQL里的ON子句,指定用来匹配的关联字段(这里是学校ID和年级)suffix:给左右表中同名的字段添加后缀(比如Year、students),避免列名冲突- 左连接特性:结果会保留左表的所有行,右表中匹配到的行会合并进来,未匹配的列自动填充为
NA
方法2:使用base R的merge()函数
如果你不想额外安装包,base R自带的merge()函数也能实现左连接,适合快速测试:
代码示例:
# 左连接:设置all.x=TRUE是实现左连接的核心 merge_result <- merge(df_2015, df_2016, by = c("School", "Grade"), all.x = TRUE, suffixes = c("_2015", "_2016"))
关键参数解释:
all.x=TRUE:强制保留左表的所有行,对应SQL的LEFT JOIN逻辑by和suffixes的作用和dplyr方法一致,用来指定关联字段和区分同名列
结果说明
两种方法的输出逻辑一致:
- 左表(2015年)的Grade3、Grade4行会合并2016年的对应数据
- 右表中独有的Grade5行不会出现在结果里(因为左连接以左表的行范围为准)
内容的提问来源于stack exchange,提问作者simplycoding
相关产品推荐
相关产品推荐

