Для очень маленького примера, когда только 2 значения свернуты в 1, что-то вроде ifelse
вполне подойдет. Но он не масштабируется больше, чем одна операция, сворачивающая одну пару значений - вы застрянете во множестве вложенных операторов ifelse
или, возможно, case_when
. Я часто выполняю эти операции и рекомендую преобразовать вашу переменную в коэффициент, чтобы вы могли более легко и гибко манипулировать уровнями. forcats::fct_collapse
делает это хорошо, а forcats::fct_other
работает в особых ситуациях.
Для небольшого примера это может показаться большим трудом, чем стоит:
library(dplyr)
df <- tribble(
~departments, ~budget,
"test1", 100,
"test2", 200,
"test3", 300
)
df %>%
mutate(departments = as.factor(departments) %>%
forcats::fct_collapse(test1 = c("test1", "test3"))) %>%
group_by(departments) %>%
summarise(budget = sum(budget))
#> # A tibble: 2 x 2
#> departments budget
#> <fct> <dbl>
#> 1 test1 400
#> 2 test2 200
Но если я добавлю больше отделов и мне потребуется выполнить несколько таких операций, это масштабируется. Здесь мне нужно свернуть 3 уровня в 1, а затем еще 2 в другой 1.
df2 <- tribble(
~departments, ~budget,
"test1", 100,
"test2", 200,
"test3", 300,
"test4", 400,
"test5", 500
)
df2 %>%
mutate(departments = as.factor(departments) %>%
forcats::fct_collapse(test1 = c("test1", "test3", "test4"),
test2 = c("test2", "test5"))) %>%
group_by(departments) %>%
summarise(budget = sum(budget))
#> # A tibble: 2 x 2
#> departments budget
#> <fct> <dbl>
#> 1 test1 800
#> 2 test2 700