Я нахожусь в процессе написания очень неСУХОЙ цепочки dplyr в R. Мне нужно вызвать dplyr::mutate() and dplyr::percent_rank()
функцию для большого количества столбцов из моего фрейма данных, и это было бы полезно для меня не иметь строки кода для каждого вызова. Мои столбцы данных, для которых мне нужно вычислить процентили, имеют следующий шаблон:
regions <- c("atr2", "sht2", "mid2", "lng2", "all2", "sht3", "lng3", "all3")
suffixes <- c("Made", "Att", "AttFreq", "Pct")
for(i in regions) {
for(j in suffixes) {
print(paste0(i, j))
}
}
В приведенном выше примере мне нужно 8 * 4 == 32
разные процентильные столбцы. Все 32 начальных столбца atr2Made
, atr2Att
и т. Д. Уже находятся в моем фрейме данных. Чтобы вычислить процентили, я делал следующее:
pctile.lineup.data <- pctile.lineup.data %>%
dplyr::group_by(season) %>%
# dplyr::group_by(season, homeConfId) %>%
dplyr::mutate(atr2MadeRankNcaa = round(100 * dplyr::percent_rank(atr2Made))) %>%
dplyr::mutate(atrAttRankNcaa = round(100 * dplyr::percent_rank(atr2Att))) %>%
dplyr::mutate(atr2AttFreqRankNcaa = round(100 * dplyr::percent_rank(atr2AttFreq))) %>%
dplyr::mutate(atr2PctRankNcaa = round(100 * dplyr::percent_rank(atr2Pct))) %>%
dplyr::mutate(sht2MadeRankNcaa = round(100 * dplyr::percent_rank(sht2Made))) %>%
dplyr::mutate(shtAttRankNcaa = round(100 * dplyr::percent_rank(sht2Att))) %>%
dplyr::mutate(sht2AttFreqRankNcaa = round(100 * dplyr::percent_rank(sht2AttFreq))) %>%
dplyr::mutate(sht2PctRankNcaa = round(100 * dplyr::percent_rank(sht2Pct))) %>%
dplyr::mutate(mid2MadeRankNcaa = round(100 * dplyr::percent_rank(mid2Made))) %>%
dplyr::mutate(midAttRankNcaa = round(100 * dplyr::percent_rank(mid2Att))) %>%
dplyr::mutate(mid2AttFreqRankNcaa = round(100 * dplyr::percent_rank(mid2AttFreq))) %>%
dplyr::mutate(mid2PctRankNcaa = round(100 * dplyr::percent_rank(mid2Pct))) %>%
... %>%
dplyr::ungroup()
Мне нужны не только 32 разные функции mutate()
, мне нужно дважды запустить этот код для двух разных group_by()
с (см. 2-ю закомментированную). Есть ли лучший способ, чем 64 строки кода? У меня есть отдельный элемент данных, который имеет 21 регион вместо 8, с теми же 4 суффиксами и теми же 2 group_by (), поэтому для вычисления этих процентилей потребуется 21 * 4 * 2 == 168 строк кода. Это не СУХОЙ - пожалуйста, помогите!
Редактировать: Я, очевидно, изучаю mutate_at
, однако я не очень хорошо знаком с версией _at
mutate. В моем фрейме данных есть и другие столбцы, кроме этих 32, и я не думаю, что mutate_all
будет работать.