У меня есть таблица data.table со строкой для каждого дня в течение 30-летнего периода с несколькими различными столбцами переменной. Причиной использования data.table является то, что файл CSV, который я использую, огромен (приблизительно 1,2 миллиона строк), поскольку для нескольких групп, характеризуемых столбцом под названием "ключ", существует 30-летняя стоимость данных.
Примерный набор данных показан ниже:
Key Date Runoff
A 1980-01-01 2
A 1980-01-02 1
A 1981-01-01 0.1
A 1981-01-02 3
A 1982-01-01 2
A 1982-01-02 5
B 1980-01-01 1.5
B 1980-01-02 0.5
B 1981-01-01 0.3
B 1981-01-02 2
B 1982-01-01 1.5
B 1982-01-02 4
Выше приведен пример двух "ключей", с некоторыми данными за январь в течение трех лет, чтобы показать, что я имею в виду. Фактический набор данных содержит сотни "ключей" и 30-летнюю ценность данных для каждого "ключа".
То, что я хочу сделать, это вывести вывод, который имеет общее среднее значение для каждого месяца для каждого ключа, как показано ниже:
Key January February March.... etc
A 4.36 ... ...
B 3.26 ... ...
то есть. общее среднее значение для января для ключа A = (2 + 1) + (0,1 + 3) + (2 + 5)/3
Когда я сделал этот анализ на одном наборе данных за тридцать лет (т.е. только один ключ), я успешно использовал следующий код для этого:
runoff_tot_average <- rowsum(DF$Runoff, format(DF$Date, '%m')) / 30
Где DF - это кадр данных для одного набора данных за 30 лет.
Могу ли я получить предложения по изменению моего кода выше, чтобы работать с большим набором данных со многими "ключами" или предложить совершенно новое решение?
Спасибо,
J
ИЗМЕНИТЬ
В приведенном ниже примере приведен пример данных выше:
Key <- c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B")
Date <- as.Date(c("1980-01-01", "1980-01-02", "1981-01-01", "1981-01-02", "1982-01-01", "1982-01-02", "1980-01-01", "1980-01-02", "1981-01-01", "1981-01-02", "1982-01-01", "1982-01-02"))
Runoff <- c(2, 1, 0.1, 3, 2, 5, 1.5, 0.5, 0.3, 2, 1.5, 4)
DT <- data.table(Key, Date, Runoff)