Есть ли альтернатива функции "revalue" из plyr при использовании dplyr?

Я поклонник функции revalue plyr для подстановки строк. Это просто и легко запомнить.

Однако, я перенес новый код в dplyr, который не имеет функции revalue. Что такое принятая идиома в dplyr для выполнения ранее сделанных действий с помощью revalue?

Ответ 1

Имеется функция recode, начиная с dplyr версии dplyr_0.5.0, которая очень похожа на revalue на plyr.

Пример, построенный из раздела Примеры документации recode:

set.seed(16)
x = sample(c("a", "b", "c"), 10, replace = TRUE)
x
 [1] "a" "b" "a" "b" "b" "a" "c" "c" "c" "a"

recode(x, a = "Apple", b = "Bear", c = "Car")

   [1] "Car"   "Apple" "Bear"  "Apple" "Car"   "Apple" "Apple" "Car"   "Car"   "Apple"

Если вы определяете только некоторые из значений, которые вы хотите перекодировать, по умолчанию остальные заполняются с помощью NA.

recode(x, a = "Apple", c = "Car")
 [1] "Car"   "Apple" NA      "Apple" "Car"   "Apple" "Apple" "Car"   "Car"   "Apple"

Это поведение можно изменить с помощью аргумента .default.

recode(x, a = "Apple", c = "Car", .default = x)
 [1] "Car"   "Apple" "b"     "Apple" "Car"   "Apple" "Apple" "Car"   "Car"   "Apple"

Существует также аргумент .missing, если вы хотите заменить отсутствующие значения чем-то другим.

Ответ 2

Мы можем сделать это с помощью chartr от base R

chartr("ac", "AC", x)

данные

x <- c("a", "b", "c")

Ответ 3

Один из вариантов, который мне удобен, - это функция mapvalues ​​для data.tables например

df[, variable := mapvalues(variable, old = old_names_string_vector, new = new_names_string_vector)]