2015-01-29 3 views
0

У меня есть данные потока за год. Я хочу получить 2 часовых средних данных и сделать таймсерий, который регистрирует средний поток за два часа вместе с меткой времени.Расчет 2-х часового среднего значения данных

Данные выглядеть следующим образом:

2005-01-01 00:00:00 18 
2005-01-01 00:15:00 18 
2005-01-01 00:30:00 18 
2005-01-01 00:45:00 18 
2005-01-01 01:00:00 18 
2005-01-01 01:15:00 18 
2005-01-01 01:30:00 18 
2005-01-01 01:45:00 19 

Таким образом, в конце концов, я хотел бы что-то, что выглядит как:

2005-01-01 00:00:00 18.125 

Это то, что я делаю прямо сейчас:

for (i in seq(1,length(streamflow),8)){ 
    streamflow2hr[i] <- mean(streamflow[i:i+7]) 
} 
valid2hr <- complete.cases(streamflow2hr) 
validIndex <- which(valid2hr,arr.ind = TRUE) 
streamflow2hrvalid <- streamflow2hr[validIndex] 
streamflow2hrvalidTime <- streamflowDateTime[validIndex] 
data2hr <- data.frame(streamflow2hrvalidTime,streamflow2hrvalid) 
names(data2hr) <- c("DateTime","Flow") 

Но поскольку я использую относительные позиции, это не соответствует 2-часовой часовой стрелке!

+0

Ваш желаемый результат неясен. –

+0

Какие два часа? – kristang

+0

У вас всегда есть 15-минутный интервал? –

ответ

0

Вы можете настроить этот код для ваших нужд:

# Generate a sample dataset 
set.seed(1) 
z <- as.POSIXct("2015-01-31 13:00:00") + 900*0:23 
d <- data.frame(t=z,v=sample(length(z))) 

d$cut <- cut(d$t,breaks="2 hours") 
aggregate(v~cut,d,mean) 
#     cut  v 
#1 2015-01-31 13:00:00 12.875 
#2 2015-01-31 15:00:00 12.125 
#3 2015-01-31 17:00:00 12.500 

Это решение не основывается на 15-минутные интервалы между метками времени. Вместо этого он делит временной интервал на 2-х часовые интервалы и использует их для расчета интервальных значений.

+0

Спасибо! Это очень помогло – Saadat