Расчет среднесуточного в R - PullRequest
7 голосов
/ 13 января 2011

Скажите, у меня есть следующая матрица:

x1 = 1:288
x2 = matrix(x1,nrow=96,ncol=3)

Есть ли простой способ получить среднее значение для строк 1: 24,25: 48,49: 72,73: 96 для столбца 2?

Обычно у меня есть временные ряды на один год, и я должен усреднять некоторые данные каждые 24 часа.

Ответы [ 3 ]

9 голосов
/ 13 января 2011

Существует.

Предположим, у нас есть дни:

Days <- rep(1:4,each=24)

, которые вы могли бы легко сделать

tapply(x2[,2],Days,mean)

Если у вас есть фрейм данных с переменной Date,Вы можете использовать это.Вы можете сделать это для всех переменных одновременно, используя агрегат:

x2 <- as.data.frame(cbind(x2,Days))
aggregate(x2[,1:3],by=list(Days),mean)

Для начала взгляните на файлы справки этих функций.Также сделайте поиск здесь, есть несколько других интересных ответов на эту проблему:

PS: Если вы собираетесь делать много временных рядов, вам следует взглянуть на пакет zoo (на CRAN: http://cran.r -project.org / web / packages / zoo / index.html )

5 голосов
/ 14 января 2011

1) ts. Поскольку это регулярные временные ряды, преобразуйте его в ряд ts и затем агрегируйте его с частоты 24 до частоты 1:

aggregate(ts(x2[, 2], freq = 24), 1, mean)

давая:

Time Series:
Start = 1
End = 4
Frequency = 1
[1] 108.5 132.5 156.5 180.5

2) зоопарк. Здесь используется зоопарк.Пакет zoo также может обрабатывать нерегулярно расположенные ряды (если нам нужно было расширить это).Ниже day.hour - номер дня (1, 2, 3, 4) плюс час как дробная часть дня, поэтому floor(day.hour) - это просто номер дня:

library(zoo)

day.hour <- seq(1, length = length(x2[, 2]), by = 1/24)
z <- zoo(x2[, 2], day.hour)
aggregate(z, floor, mean)
##          1     2     3     4 
##      108.5 132.5 156.5 180.5

Если zzэто результат aggregate, тогда coredata(zz) и time(zz) являются значениями и временем соответственно, как обычные векторы.

3 голосов
/ 14 января 2011

Довольно компактный и быстрый в вычислительном отношении способ сделать это - преобразовать вектор в подходящую матрицу и вычислить среднее значение столбца.

colMeans(matrix(x2[,2],nrow=24))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...