如何将命名向量或两个向量作为参数传递给dplyr :: recode

时间:2017-07-18 11:05:49

标签: r dplyr recode

我想将命名向量或两个向量传递给dplyr :: recode。 假设我有:

<Input id='to-input' />
<Input id='from-input' />

我想要做的是使用recode_tbl的列重新编码x,而不必手动指定对:

library(dplyr)
set.seed(1)
x <- c("customer", sample(c("a", "b", "c"), 10, replace = TRUE))
recode_tbl <- tibble(letter = letters[1:3], fruit = c("apple", "banana", "cranberry"))

类似的东西:

recode(x, a = "apple", b = "banana", c = "cranberry")

这显然不起作用。我并不反对尝试NSE,但是如果有人能够让球滚动那就太棒了。

感谢。

1 个答案:

答案 0 :(得分:7)

我们可以在base R

中执行此操作
x1 <- unname(setNames(recode_tbl$fruit, recode_tbl$letter)[x])
x1[is.na(x1)] <- x[is.na(x1)]

或将do.callrecode

一起使用
do.call(dplyr::recode, c(list(x), setNames(recode_tbl$fruit, recode_tbl$letter)))
#[1] "customer"  "apple"     "banana"    "banana"    "cranberry" "apple"
#[8] "cranberry" "cranberry" "banana"    "banana"    "apple"