- Небольшие изменения в тестовых данных. Столбцы больше не группируются по раундам, а вместо этого группируются по командам, как в случае реального набора данных.
Я пробовал различные методы для создания нескольких новых столбцов, сводя к минимуму повторение в коде. Мой первоначальный и успешный метод требует чрезмерного копирования и вставки, но я хотел бы минимизировать это насколько возможно. Ниже приведены примерные данные для проблемы:
df <- tribble(~R1TeamX, ~R2TeamX,~R3TeamX, ~R1TeamY,~R2TeamY, ~R3TeamY,
10, 11, 12, 15, 19, 20,
11, 13, 14, 25, 18, 15)
Этот пример данных для трех раундов с оценками как для команды X, так и для команды Y. Я хочу создать дополнительные столбцы, чтобы найти разницу между оценками Команда X и Y. Настоящий набор данных содержит более 30 раундов.
Мое первоначальное решение использовало mutate и работает следующим образом:
df <- df %>%
mutate(R1Diff = R1TeamX - R1TeamY,
R2Diff = R2TeamX - R2TeamY,
R3Diff = R3TeamX - R3TeamY)
Хотя это работает, оно не масштабируемо. Я попытался сократить это количество кода до меньшего, используя str_ c & mutate, но не могу определить правильный метод цикла, чтобы это работало для нескольких строк кода. Ниже представлена моя попытка стандартизировать код на данный момент:
teamx <- str_c("R", 1:3, "TeamX")
teamy <- str_c("R", 1:3, "TeamY")
round_diff <- str_c("R", 1:3, "Diff")
df <- df %>%
mutate(!!round_diff[1] := UQ(parse_quo(teamx[1], global_env())) - UQ(parse_quo(teamy[1], global_env())),
!!round_diff[2] := UQ(parse_quo(teamx[2], global_env())) - UQ(parse_quo(teamy[2], global_env())),
!!round_diff[3] := UQ(parse_quo(teamx[3], global_env())) - UQ(parse_quo(teamy[3], global_env())))
Хотя требуется дополнительный код, это до некоторой степени стандартизирует мой ввод, уменьшая часть работы ног, но я знаю, что должен быть какой-то способ уменьшить это в одну строку. Я исследовал mutate_at и циклы безрезультатно. Я подозреваю, что эту проблему можно решить с помощью purrr :: map, но у меня достаточно возможностей в этой области, чтобы определить правильный подход.
Любая помощь будет принята с благодарностью.