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

jdzmm42g  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(104)

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

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_tbl的列来重新编码x,而不必手动指定对:

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

例如:

recode(x, as.name(recode_tbl$letter) = recode_tbl$fruit)

很明显这行不通。我不反对尝试NSE,但如果有人能让球滚动,那将是伟大的。
谢谢.

wlwcrazw

wlwcrazw1#

我们可以在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"

或者当传递一个命名向量到重命名级别时使用!!!要拼接

recode(x, !!!setNames(recode_tbl$fruit, recode_tbl$letter))

相关问题