如何基于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
相关产品推荐
相关产品推荐

