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

如何基于df1$df2_id的行索引将df2左连接至df1?

问题描述

我有两个数据框,具体如下:

数据框df1

df1 <- data.frame(ID = c('a', 'b', 'c', 'c1', 'd', 'e', 'f', 'g', 'h', 'h1'),
                 var2 = c(7, 9, 2, 4, 3, 6, 8, 2, 1, 2),
                 var3 = c(21, 50, 40, 30, 29, 45, 33, 51, 70, 46),
                 df2_id = c(1, 5, 2, 4, 1, 2, 3, 3, 5, 1))

数据框df2

df2 <- data.frame(pcd = c('e1', 'm35', 'sk3', 'bk4', 'nw2'),
                 x = c(6, 8, 2, 1, 2),
                 y = c(5, 3, 1, 7, 6))

需要基于df1$df2_id中记录的行索引,将df2左连接到df1,最终得到如下输出:

> df1
   ID var2 var3 df2_id pcd x y
1   a    7   21      1  e1 6 5
2   b    9   50      5 nw2 2 6
3   c    2   40      2 m35 8 3
4  c1    4   30      4 bk4 1 7
5   d    3   29      1  e1 6 5
6   e    6   45      2 m35 8 3
7   f    8   33      3 sk3 2 1
8   g    2   51      3 sk3 2 1
9   h    1   70      5 nw2 2 6
10 h1    2   46      1  e1 6 5
解决方案

由于df1$df2_id对应的是df2的行号,这里提供两种实现左连接的方法:

方法一:使用dplyr包

library(dplyr)

# 给df2添加行索引列,与df1的df2_id对应
df2_with_id <- df2 %>% mutate(df2_id = row_number())

# 执行左连接
result <- left_join(df1, df2_with_id, by = "df2_id")

方法二:基础R原生实现

无需额外安装包,直接通过行索引匹配合并:

# 按df1$df2_id的顺序提取df2对应行的记录
df2_matched <- df2[df1$df2_id, ]

# 合并两个数据框
result <- cbind(df1, df2_matched)

两种方法均可得到你需要的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:35:10