sim*_*bus 5 dictionary r dplyr
plyr::mapvalues 可以根据字典重新编码向量,即现有值和替换值的两个匹配向量。
library(plyr)
data <- c("a", "b", "c", "a")
dict_old <- c("a", "b", "c")
dict_new <- c("Apple", "Banana", "Carrot")
mapvalues(data, dict_old, dict_new)
[1] "Apple" "Banana" "Carrot" "Apple"
Run Code Online (Sandbox Code Playgroud)
在 dplyr 中,可以通过创建包含新值的列表并将旧值作为名称分配给列表元素来获得等效结果:
list <- as.list(dict_new)
names(list) <- dict_old
recode(data, !!!list)
[1] "Apple" "Banana" "Carrot" "Apple"
Run Code Online (Sandbox Code Playgroud)
然而,这让我觉得相当笨拙。在 tidyverse 中是否有更清洁的方法来做到这一点?
一种使用方式stringr可能是:
str_replace_all(data, setNames(dict_new, dict_old))
[1] "Apple" "Banana" "Carrot" "Apple"
Run Code Online (Sandbox Code Playgroud)