如何在R中将10分钟时间块转换为1分钟间隔

时间:2013-07-01 15:05:39

标签: r datetime xts

我希望将10分钟的时间块转换为1分钟的时间块以获得大型矢量。我的数据时间值间隔为10分钟,表示以给定时间戳结束的10分钟时间块。以下示例数据:

data<- structure(list(datetime = structure(1:7,  .Label = c("30/11/2011 02:32",
 "30/11/2011 02:42", "30/11/2011 02:52", "30/11/2011 03:02", "30/11/2011 03:12",
 "30/11/2011 03:22", "30/11/2011 03:32"), class = "factor"), count =
c(100L, 60L, 10L, 10L, 200L, 180L, 190L)), .Names = c("datetime", "count"), class =  
"data.frame", row.names = c(NA, -7L))

我已经成功地将10分钟的时间块转换为1分钟的块,在我的向量中的第一个和最后一个datetime值之间,使用xts包,如下所示:

data$datetime <- strptime(data$datetime, format="%d/%m/%Y %H:%M") 
data$datetime <- as.POSIXct(data$datetime)
data_xts <- as.xts(data, order.by=data$datetime)
dtmins <- seq(start(data_xts$datetime), end(data_xts$datetime), by = "1 min")

但是,由于时间值与​​10分钟块的“结束”有关,因此我还需要在向量中的第一个日期时间行之前创建九行1分钟的日期时间值。我希望最终得到一个如下所示的输出向量(并继续到我原始向量中的最后一个datetime值):

datetime
30/11/2011 02:23
30/11/2011 02:24
30/11/2011 02:25
30/11/2011 02:26
30/11/2011 02:27
30/11/2011 02:28
30/11/2011 02:29
30/11/2011 02:30
30/11/2011 02:31
30/11/2011 02:32
30/11/2011 02:33
30/11/2011 02:34
30/11/2011 02:35
30/11/2011 02:36
30/11/2011 02:37
etc...

我正在努力寻找解决方案。任何帮助将非常感激!

1 个答案:

答案 0 :(得分:2)

只需将xts对象与您想要的次序合并即可。

Data <- structure(list(datetime=structure(c(1322641920, 1322642520, 1322643120,
  1322643720, 1322644320, 1322644920, 1322645520), class=c("POSIXct", "POSIXt"),
  tzone=""), count=c(100L, 60L, 10L, 10L, 200L, 180L, 190L)),
 .Names=c("datetime", "count"), row.names=c(NA, -7L), class="data.frame")

data_xts <- as.xts(Data[,-1], order.by=Data$datetime)
data_xts <- merge(data_xts, seq(start(data_xts)-60*9, end(data_xts), by="1 min"))

然后,如果需要,您可以使用na.locf或类似内容填写缺失值。

data_xts <- na.locf(data_xts)