从15分钟数据中提取每小时数据

时间:2015-02-12 17:08:41

标签: r timestamp time-series extraction

我有一个包含两列,时间和流量的数据框。时间序列的时间间隔是15分钟,我想剪切此时间序列,以便输出时间序列具有一致的一小时时间间隔和来自原始数据的每小时时间戳的流量值。如何提取每小时数据?

输入:

structure(list(t = structure(c(1104555600, 1104556500, 1104557400, 
1104558300, 1104559200, 1104560100, 1104561000, 1104561900, 1104562800
), class = c("POSIXct", "POSIXt"), tzone = "EST"), flow = c(18, 
18, 18, 18.125, 18.125, 18.125, 18.125, 18.125, 18.125)), .Names = c("t", "flow"), row.names = c(NA, 9L), class = "data.frame")

对于输出,我想要像

这样的东西
time    flow
2005-01-01 00:00:00 18.000
2005-01-01 01:00:00 18.125
2005-01-01 02:00:00 18.125

3 个答案:

答案 0 :(得分:2)

您可以使用cut获取每个t变量所在的小时,然后只取每个cut组的第一个元素。如果df是您的数据框:

aggregate(df, list(cut(df$t,breaks="hour")), FUN=head, 1)[,-2]

#             Group.1   flow
# 2005-01-01 00:00:00 18.000
# 2005-01-01 01:00:00 18.125
# 2005-01-01 02:00:00 18.125

答案 1 :(得分:1)

如果您的数据框是:

library(dplyr)
filter(a, grepl(":00:00",t))

答案 2 :(得分:0)

你没有给出任何例子,但据我所知,你只想保留每一排。

在包含

的数据集中
time<- c(10,11,12,13,14,15,16,17,18,19)
flow<- c(3,4,5,6,7,8,9,10,11,12)
d <- data.frame(time,flow)

1    10    3
2    11    4
3    12    5
4    13    6
5    14    7
6    15    8
7    16    9
8    17   10
9    18   11
10   19   12

> d[seq(1, NROW(d), by = 4),]

你只保留每四排。

time flow
1   10    3
5   14    7
9   18   11