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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:29:39