R语言如何引用另一DataFrame列按共享ID匹配生成新列
实现方案
方法1:基础R双索引(推荐,效率最高,无关联操作)
直接利用矩阵的行、列索引定位取值,不需要做任何表关联操作,完全符合你避免大规模关联的需求,适合大样本、多列的场景:
# 给df2设置行名为id值,方便按id快速索引 rownames(df2) <- as.character(df2$id) # 按「行=df1的id、列=df1的reference」双维度定位取值 df1$new_col <- df2[as.character(df1$id), df1$reference]
方法2:tidyverse逐行匹配
如果日常使用dplyr语法较多,可以用逐行操作实现相同效果:
library(dplyr) df1 <- df1 %>% rowwise() %>% mutate(new_col = df2[[reference]][which(df2$id == id)]) %>% ungroup()
前置校验(可选)
如果数据存在脏数据风险,可以先做合法性校验避免运行报错:
# 校验所有reference值都是df2的合法列名 stopifnot(all(df1$reference %in% colnames(df2))) # 校验所有df1的id都能在df2中匹配到 stopifnot(all(df1$id %in% df2$id))
内容的提问来源于stack exchange,提问作者Luna Deloge
相关产品推荐
相关产品推荐

