У меня есть фрейм данных с 40 переменными G1_a
, G1_b
, ... до G20_a
, G20_b
(вытекает из опроса).Я хочу создать 20 новых переменных G1
... G20
, которые суммируют существующие переменные.
data <- data.frame(G1_a = c(0, 0, 0, 1, NA),
G1_b = c(0, 0, 1, 1, NA),
G2_a = c(0, 0, 0, 1, NA),
G2_b = c(0, 0, 1, 1, NA))
# Reshaping without for-loop:
data <- data %>%
mutate(G1 = case_when(
G1_a == 1 ~ "own_offer",
G1_b == 1 ~ "no_offer",
T ~ NA_character_
))
data <- data %>%
mutate(G2 = case_when(
G2_a == 1 ~ "own_offer",
G2_b == 1 ~ "no_offer",
T ~ NA_character_
))
Я хочу автоматизировать создание новых переменных в цикле for, что-то вроде:
# Reshaping with for-loop:
for(i in 1:2) {
data <- data %>%
mutate(assign(paste0("G", i), case_when(
get(paste0("G", i, "_a")) == 1 ~ "own_offer",
get(paste0("G", i, "_b")) == 1 ~ "no_offer",
T ~ NA_character_
)))
}
Мой вопрос состоит из двух частей:
1) Можно ли объединить assign
с mutate
?Мне известны такие подходы, как mutate(df, !!varname := Petal.width * n)
(см. здесь ) для динамического назначения имен параметров.Однако я не смог объединить это с изменением формы данных, которые я хочу запустить.
2) Позволяет ли dplyr
использовать paste0
вместе с case_when
и mutate
?