R语言如何使用dplyr mutate匹配列值与命名向量生成新列
解决方案
直接在mutate()中利用R命名向量的原生索引特性即可完成匹配,全程不需要中断管道操作,代码最简且运行效率高:
library(tidyverse) # 示例数据构造 dat <- data.frame(col1 = c("A","B","C"), col2 = c(4,5,6)) %>% as_tibble() nam <- c("A" = "Andrew", "B" = "Bob", "C" = "Charles") # 管道操作中新增匹配列 dat2 <- dat %>% mutate(col3 = unname(nam[col1]))
说明
- 命名向量支持直接以元素名称作为索引取值,
nam[col1]会逐行读取col1的首字母值,匹配nam的名称后取出对应全称 - 外层加
unname()是为了清除返回结果自带的名称属性,避免列值携带多余标签,和预期输出结构完全一致 - 如果数据中可能存在
col1的首字母在nam里没有对应匹配项的场景,可以替换为更稳妥的写法,未匹配值会自动填充为NA,不会出现索引错位:
dat2 <- dat %>% mutate(col3 = unname(nam[match(col1, names(nam))]))
运行后得到的结果和目标数据集完全一致:
# A tibble: 3 × 3 col1 col2 col3 <chr> <dbl> <chr> 1 A 4 Andrew 2 B 5 Bob 3 C 6 Charles
内容的提问来源于stack exchange,提问作者Victor Fernando
相关产品推荐
相关产品推荐

