使用查找表使用dpylr重新编码值

时间:2017-01-08 14:48:57

标签: r dplyr

有没有办法将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)

我在 plyr 包中找到了 mapvalues revalue 函数。如here所述,可以将它们组合起来。 但是,我想知道只有 dplyr 才能实现类似的东西。

3 个答案:

答案 0 :(得分:5)

我们可以使用base R

v1 <- unlist(lookup)[data]
ifelse(is.na(v1), data, v1)

答案 1 :(得分:5)

do.call(dplyr::recode, c(list(data), lookup))
[1] "Pear" "c"    "d"    "c"    "Pear" "Pear" "d"    "c"    "d"    "c"

答案 2 :(得分:1)

它是这样的:

dplyr::recode(data, !!!lookup)

对于在数据帧小标题中进行mutate也很有用:

df <- tibble(code = data)

df %>% 
  mutate(fruit = recode(code, !!!lookup))