有没有办法使用dpylr 的重新编码功能和查找表(data.frame或list)?
我想拥有的东西会是这样的:
# Recode values with list of named arguments
data <- sample(c("a", "b", "c", "d"), 10, replace = T)
lookup <- list(a = "Apple", b = "Pear")
dplyr::recode(data, lookup)
Run Code Online (Sandbox Code Playgroud)
我发现mapvalues和重估从功能上plyr包.为解释将它们组合在一起可以在这里.但是,我想知道只有dplyr才能实现类似的功能.
我们可以用 base R
v1 <- unlist(lookup)[data]
ifelse(is.na(v1), data, v1)
Run Code Online (Sandbox Code Playgroud)
do.call(dplyr::recode, c(list(data), lookup))
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)[1] "Pear" "c" "d" "c" "Pear" "Pear" "d" "c" "d" "c"
它的工作原理如下:
dplyr::recode(data, !!!lookup)
Run Code Online (Sandbox Code Playgroud)
对于数据帧 tibble 中的 mutate 也很有用:
df <- tibble(code = data)
df %>%
mutate(fruit = recode(code, !!!lookup))
Run Code Online (Sandbox Code Playgroud)