Использование plyr:: mapvalues ​​с dplyr

plyr::mapvalues можно использовать следующим образом:

mapvalues(mtcars$cyl, c(4, 6, 8), c("a", "b", "c"))

Но это не работает:

mtcars %>%
dplyr::select(cyl) %>%
mapvalues(c(4, 6, 8), c("a", "b", "c")) %>%
as.data.frame()

Как использовать plyr::mapvalues с dplyr? Или еще лучше, что эквивалентно dplyr?

Ответ 1

Чтобы использовать его и вернуть data.frame с одним столбцом:

mtcars %>%
  transmute(cyl = plyr::mapvalues(cyl, c(4, 6, 8), c("a", "b", "c")))

Или, если вы хотите один векторный вывод, как в вашем рабочем примере, используйте pull:

mtcars %>%
  pull(cyl) %>%
  plyr::mapvalues(., c(4, 6, 8), c("a", "b", "c"))

Если вы используете одновременно и dplyr, и plyr, посмотрите это примечание в файле readme dplyr:

Вам нужно быть немного осторожнее, если вы загружаете и plyr, и dplyr одновременно. Я бы рекомендовал сначала загрузить plyr, затем dplyr, чтобы более быстрые функции dplyr были первыми в пути поиска. В общем, любая функция, предоставляемая как dplyr, так и plyr, работает аналогичным образом, хотя функции dplyr, как правило, быстрее и более общие.

Обратите внимание, что вы можете вызывать mapvalues используя plyr::mapvalues если dplyr загружен без необходимости загружать plyr.