В течение некоторого времени я создавал очень длинные операторы переименования case_when()
из 20+ строк для создания новых столбцов на основе значений одного последующего столбца.
Прямо сейчас это выглядит примерно так:
tibble(x = rep(1:3, 3),
y = case_when(x == 1 ~ "good",
x == 2 ~ "good",
x == 3 ~ "bad",
TRUE ~ as.character(x)))
Но для длинных списков переменных совершенно неэффективно переименовывать/создавать новые столбцы, подобные этому. Один экземпляр имеет 4 потенциальных назначения (столбец y
выше) для 3-6 переменных, поэтому много повторений.
Любой источник/идеи о том, как сделать этот процесс более эффективным?
Это то, что вы ищите. Я применяю вашу классификацию к 4 столбцам одновременно, используя mutate_at
:
библиотека (dplyr)
tibble(x1 = rep(1:3, 3),
x2 = rep(3:1, 3),
x3 = rep(1:3, each = 3),
x4 = rep(3:1, each = 3)) %>%
mutate_at(vars(c("x1", "x2", "x3", "x4")),
list(y = ~case_when(. %in% 1:2 ~ "good",
. == 3 ~ "bad",
TRUE ~ as.character(.))))
# A tibble: 9 x 8
x1 x2 x3 x4 x1_y x2_y x3_y x4_y
<int> <int> <int> <int> <chr> <chr> <chr> <chr>
1 1 3 1 3 good bad good bad
2 2 2 1 3 good good good bad
3 3 1 1 3 bad good good bad
4 1 3 2 2 good bad good good
5 2 2 2 2 good good good good
6 3 1 2 2 bad good good good
7 1 3 3 1 good bad bad good
8 2 2 3 1 good good bad good
9 3 1 3 1 bad good bad good
Используйте
mutate_at()
вместе сcase_when
, как показано здесь