Я могу предложить вам data.table
решение. Фактически, есть несколько способов сделать это.
Последние шаги (применить квартиль по группе к переменной Value
) можно перевести в (если вы хотите, как в вашем примере, два столбца):
statistics[,.('p25' = quantile(get('Value'), probs = 0.25), 'p75' = quantile(get('Value'), probs = 0.75)),
by = c("Variable", "NewDate")]
Если вы предпочитаете вывод в длинном формате:
library(data.table)
setDT(statistics)
statistics[,.(lapply(get('Value'), quantile, probs = .25,.75)) ,
by = c("Variable", "NewDate")]
Все шаги вместе
Возможно, будет лучше, если вы решите использовать data.table
, чтобы выполнить все шаги, используя data.table глаголы. Я предполагаю, что ваши данные имеют структуру, аналогичную сгенерированному и упорядоченному фрейму данных, т.е.
statistics <- FakeData %>%
gather(-Date, key = "Variable", value = "Value")
В этом случае шаги mutate
и filter
станут
statistics[,`:=`(Year = year(Date), Month = month(Date))]
statistics <- statistics[Month %between% c(3,5)]
statistics[, NewDate = :ymd(paste("2020", Month,day(Date), sep = "-"))]
И выберите последний шаг, который вы предпочитаете, например,
statistics[,.('p25' = quantile(get('Value'), probs = 0.25), 'p75' = quantile(get('Value'), probs = 0.75)),
by = c("Variable", "NewDate")]