Возможное решение:
library(tidyverse)
df %>%
mutate(category = LETTERS[category])
#> id category
#> 1 A A
#> 2 B D
#> 3 C C
#> 4 D A
Здесь я предлагаю три метода для достижения вашей цели.
Если у вас есть вектор значений для преобразования, вы можете использовать match
, чтобы найти индекс вектора для замены столбца category
.
vec <- c("1" = "A", "2" = "B", "3" = "C", "4" = "D")
df$category <- vec[match(df$category, names(vec))]
Используйте оператор case_when
, чтобы сопоставить значения в category
, и назначьте ему новые строки.
library(dplyr)
df %>% mutate(category = case_when(category == 1 ~ "A",
category == 2 ~ "B",
category == 3 ~ "C",
category == 4 ~ "D",
TRUE ~ NA_character_))
Или, если у вас есть фрейм данных с двумя столбцами, указывающими значения для преобразования, вы можете left_join
их. Здесь фрейм данных для преобразования создается enframe
.
left_join(df, enframe(vec), by = c("category" = "name")) %>% select(-value)
id category
1 A A
2 B D
3 C C
4 D A
df <- structure(list(id = c("A", "B", "C", "D"), category = c("A",
"D", "C", "A")), row.names = c(NA, -4L), class = "data.frame")