我有三年的时间序列数据,间隔时间为5分钟,我现在想要计算这些数据集的每小时和每日平均值而不排除NA值,并且还要绘制时间序列。我的数据集如下:
Date Time Temp Pre humidity Rainfall Windspd
2014-01-01 00:00:05 NA 1002 100 350 30
2014-01-01 00:00:10 30 1000 80 NA NA
.......... ......
......... .......
......... .......
2015-12-31 23:55:00 .. ... ... ... ...
答案 0 :(得分:0)
首先,创建可重复的示例(您应该这样做以使人们更容易帮助您) - 我认为您正在谈论5秒(而非分钟)间隔并缩短时间范围:
myDate = seq.POSIXt(as.POSIXct("2014-01-01 00:00:05"),
as.POSIXct("2014-07-31 23:55:00"),
by='5 sec')
N = length(myDate)
df = data.frame(Date = myDate,
Temp = runif(N, 5, 35),
Pre = runif(N, 800, 1200),
humidity = runif(N, 0, 100),
Rainfall = runif(N, 100, 500),
Windspd = runif(N, 0, 50))
set.seed(13)
df$Temp[sample(1:N, 1000)] = NA
df$Pre[sample(1:N, 500)] = NA
df$humidity[sample(1:N, 10000)] = NA
df$Rainfall[sample(1:N, 4000)] = NA
df$Windspd[sample(1:N, 8000)] = NA
您可以通过dplyr
首先grouping
数据在您感兴趣的时间步骤和summarizing
您的分组数据中应用函数(此处)来有效地完成您想实现的目标,mean
)。
对于每日平均值,这很容易:只需按日分组。
对于小时平均值,您可以使用5分钟序列中的中断来cut
您的数据(您可能希望调整该序列的最小值和最大值...)。
library(dplyr)
daily = df %>% group_by(Daily = format(Date, "%Y-%m-%d")) %>%
summarise_each(funs(mean=mean(., na.rm=T)))
hourseq = seq.POSIXt(min(df$Date), max(df$Date), by='1 hour')
hourly = df %>% group_by(Hourly = cut(Date, breaks=hourseq)) %>%
summarise_each(funs(mean=mean(., na.rm=T)))