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

Bus*_*oot 6 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)
Run Code Online (Sandbox Code Playgroud)

我发现mapvalues重估从功能上plyr包.为解释将它们组合在一起可以在这里.但是,我想知道只有dplyr才能实现类似的功能.

akr*_*run 5

我们可以用 base R

v1 <- unlist(lookup)[data]
ifelse(is.na(v1), data, v1)
Run Code Online (Sandbox Code Playgroud)

  • 不是* dplyr *函数,但* base R *也可以。 (2认同)

Axe*_*man 5

do.call(dplyr::recode, c(list(data), lookup))
Run Code Online (Sandbox Code Playgroud)
[1] "Pear" "c"    "d"    "c"    "Pear" "Pear" "d"    "c"    "d"    "c"
Run Code Online (Sandbox Code Playgroud)


Mar*_*tin 5

它的工作原理如下:

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)