如何在R语言中基于匹配数据框重命名dfa的id列值?
R语言实现dfa的id列值替换方法
首先先复现你提供的三个数据框:
dfa <- data.frame(name = c("jack", "rose"), id = c(1, 2)) dfb <- data.frame(id = c("a", "b"), job = c("student", "tutor")) dfc <- data.frame(primary = c("a", "b"), colname = c(2, 1))
下面提供几种可行的实现方式:
方法一:Base R 原生实现(无需额外包)
利用match()函数匹配映射关系,直接替换id列:
dfa$id <- dfc$primary[match(dfa$id, dfc$colname)]
原理:match(dfa$id, dfc$colname)会返回dfa$id每个值在dfc$colname中的位置索引,再用这个索引取dfc$primary对应位置的值,完成替换。
方法二:dplyr tidyverse风格实现
如果你习惯用tidyverse工具链,可以通过连接数据框再替换:
library(dplyr) dfa <- dfa %>% left_join(dfc, by = c("id" = "colname")) %>% # 按id和colname匹配连接 mutate(id = primary) %>% # 用primary列替换原id select(-primary) # 移除临时的primary列
方法三:dplyr recode 直接映射(适合简单场景)
如果映射规则明确且数量少,也可以直接用recode()函数硬编码映射关系:
library(dplyr) dfa <- dfa %>% mutate(id = recode(id, "1" = "b", "2" = "a"))
替换完成后,dfa的结果会变成:
| name | id |
|---|---|
| jack | b |
| rose | a |
内容的提问来源于stack exchange,提问作者Cabiria Liang
相关产品推荐
相关产品推荐

