R语言中使用自定义映射批量更新数据框的惯用方法
在R中根据映射批量替换数据框值并创建新变量
嘿,这事儿超简单!你已经有了目标数据框和映射规则,要生成新列z把x里的字符替换成对应数值对吧?我给你两种实用的方法:
先确认下你的原始数据和映射(方便大家参考上下文):
# 你的原始数据框 test <- data.frame(x=c('a','b','a','c','a','b','d'),y=rep('test',7),stringsAsFactors = FALSE) # 你的映射规则 mapping <- list(a=1,b=2,c=3,d=4)
方法1:Base R 原生实现(无需额外包)
直接利用列表的索引特性,把x列的每个值作为索引去取mapping里的对应值,再转成向量赋值给新列z:
test$z <- unlist(mapping[test$x])
执行后你的数据框就变成这样:
> test x y z 1 a test 1 2 b test 2 3 a test 1 4 c test 3 5 a test 1 6 b test 2 7 d test 4
方法2:用dplyr的tidy风格实现
如果你习惯用tidyverse系列工具,dplyr的recode()函数搭配解包操作!!!会更贴合数据管道的写法:
library(dplyr) test <- test %>% mutate(z = recode(x, !!!mapping))
这个方法同样能得到和上面完全一致的结果,而且在复杂的数据处理流程中可读性更强。
内容的提问来源于stack exchange,提问作者SkyWalker
相关产品推荐
相关产品推荐

