R语言如何根据列表名称匹配数据框向量生成对应新列
解法1:使用dplyr::recode(最简洁的tidyverse写法)
直接通过!!!语法注入命名列表的映射关系,指定未匹配值返回原值即可:
library(tidyverse) mydf2 <- mydf %>% mutate(value2 = recode(value, !!!unlist(mylist), .default = value))
解法2:使用case_when实现(符合你提到的语法思路)
先判断值是否在列表名称中,匹配成功则取对应列表值,否则保留原值:
mydf2 <- mydf %>% mutate(value2 = case_when( value %in% names(mylist) ~ unlist(mylist)[value], .default = value ))
解法3:基础R实现(无需加载第三方包)
通过向量索引匹配后补全缺失值即可:
mydf$value2 <- unlist(mylist)[mydf$value] mydf$value2[is.na(mydf$value2)] <- mydf$value[is.na(mydf$value2)]
以上三种方法输出的结果都和你提供的预期输出完全一致。
内容的提问来源于stack exchange,提问作者JRR
相关产品推荐
相关产品推荐

