用5分钟计算3年时间序列数据的每小时和每日平均值,不排除NA值

时间:2016-03-14 09:41:34

标签: r

我有三年的时间序列数据,间隔时间为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  ..   ...    ...       ...    ...

1 个答案:

答案 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)))