Предположим, у меня есть фрейм данных, который выглядит следующим образом:
fact_code style_serial ss rib button rib_s button_s
1008 style_1018 1 0 0 1 1
1008 style_1018 0 1 0 1 1
1008 style_1018 0 1 0 1 1
1008 style_1018 0 0 1 1 1
1008 style_1003 1 0 1 0 1
1008 style_1003 0 0 1 0 1
1008 style_1003 0 0 0 0 1
1008 style_1003 0 0 0 0 1
1004 style_1197 1 0 0 1 0
1004 style_1197 0 0 0 1 0
1004 style_1197 0 0 0 1 0
1004 style_1197 0 1 0 1 0
Ключевые переменные, ребро и кнопка являются фиктивными переменными. Они указывают, имеет ли определенный стиль одежды, произведенный фабрикой, ребро или кнопку или оба. Затем я хочу взять максимум этих фиктивных переменных, сгруппированных по fact_code
и style_serial
, и в этом случае я называю их как rib_s
и button_s
.
Переменные rib_s
и button_s
были сгенерированы следующим образом:
df <- df %>% group_by(fact_code, style_serial) %>% mutate(rib_s = max(rib, na.rm = TRUE))
df <- df %>% group_by(fact_code, style_serial) %>% mutate(button_s = max(button, na.rm = TRUE))
Теперь предположим, что у меня есть около 20 таких переменных. Я хотел создать цикл, который запускается столько раз, сколько переменных и каждый раз выполняет приведенный выше код для каждой из 20 фиктивных переменных.
Я попробовал это для 2 переменных в качестве теста:
for (xx in c("rib", "button")){
df <- df %>%
group_by_(fact_code, style_serial) %>%
yy <- paste0(c(xx, "s"), collapse = "_") %>%
mutate_(yy = max(xx, na.rm = TRUE))
}
Но мне выдается следующее сообщение об ошибке:
Error in UseMethod("mutate_") :
no applicable method for 'mutate_' applied to an object of class "character"
Я также пробовал использовать функции base r, например tapply
и aggregate
, но всегда получаю сообщения об ошибках.
У вас есть способ обойти эту проблему?