6 votes

comment passer un vecteur nommé ou deux vecteurs comme arguments à dplyr::recode

J'aimerais passer un vecteur nommé ou deux vecteurs à dplyr::recode. Disons que j'ai :

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"))

Ce que j'aimerais faire, c'est utiliser les colonnes de recode_tbl pour recoder x, sans avoir à spécifier les paires manuellement :

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

Quelque chose comme :

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

Cela ne fonctionne évidemment pas. Je ne suis pas opposé à l'idée d'essayer NSE, mais si quelqu'un pouvait faire bouger les choses, ce serait formidable.

Merci.

7voto

akrun Points 148302

Nous pouvons le faire dans base R

x1 <- unname(setNames(recode_tbl$fruit, recode_tbl$letter)[x])
x1[is.na(x1)] <- x[is.na(x1)]

Ou utilisez do.call con recode

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"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X