按照起始时间和结束时间获取时间序列数据

3

我有100个文本文件,每个文件包含不同起始和结束时间的时间序列。我想提取这些序列在共同时间段内的值。 使用以下代码生成示例数据:

set.seed(1)
D1 = data.frame(time = seq(ISOdatetime(2012, 6, 26, 3, 15, 00), 
                       length = 500, by = 900),
            value = rnorm(500))
D2 = data.frame(time = seq(ISOdatetime(2012, 6, 24, 5, 30, 00),
                       length = 541, by = 900),
            value = rnorm(541))
D3 = data.frame(time = seq(ISOdatetime(2012, 6, 23, 5, 45, 00),
                       length = 700, by = 900),
            value = rnorm(700))

这些数据会给你三个时间系列的起始和结束时间,以及不同的时间。我希望只保留共同时间段的值并删除其余部分。例如, 如果,
  • 第一系列从“2012-6-26 3:45:26”开始,到“2012-8-07 4:45:26”结束
  • 第二个从“2012-6-24 5:55:27”开始,到“2012-7-28 7:45:26”结束
  • 第三个从“2012-6-23 5:04:30”开始,到“2012-7-27 4:45:26”结束

然后,我希望保留三个时间序列的交集数据,即相应于以下内容的数据:

  • 开始:“2012-6-26 3:45:26”
  • 结束:“2012-7-27 4:45:26”
  • 对于所有三个系列,并删除其余部分。

我在SO和其他网站上搜索了但没有找到解决方案。需要帮忙。 我该怎么做?


你关心的时间精度是多少?你的计算(15*60)是以15分钟为间隔的,但你提到的第二和第三系列的假设开始时间(5:55:27和5:04:30)不是。这可能会使合并变得困难,因为默认情况下合并将使用精确的时间匹配。可能有其他方法可以解决合并的问题,但这是我想到的方法。在查看我的答案和这个评论之后,你的数据是否以易于合并的形式存在,还是以其他形式存在? - A5C1D2H2I1M1N2O1R2T1
1个回答

4

看起来你需要熟悉 xts 包。将你的数据框转换为 xts 时间序列对象,然后使用 merge。使用 merge 将合并所有值,所以如果你想要在所有值中出现的值,也可以使用 na.omit

require(xts)
D1 = xts(d1$Value, d1$Time)
D2 = xts(d2$Value, d2$Time)
D3 = xts(d3$Value, d3$Time)
temp = merge(D1, D2, D3)

这里是一些示例输出。 对于headtail命令,需要注意存在NA值。
head(temp)
#                              D1 D2 D3
# 2012-06-26 13:15:19 -0.50219235 NA NA
# 2012-06-26 13:30:19  0.13153117 NA NA
# 2012-06-26 13:45:19 -0.07891709 NA NA
# 2012-06-26 14:00:19  0.88678481 NA NA
# 2012-06-26 14:15:19  0.11697127 NA NA
# 2012-06-26 14:30:19  0.31863009 NA NA
tail(temp)
#                     D1 D2         D3
# 2012-07-04 05:45:19 NA NA  1.4799645
# 2012-07-04 06:00:19 NA NA -0.3942801
# 2012-07-04 06:15:19 NA NA -0.6767234
# 2012-07-04 06:30:19 NA NA -0.2425192
# 2012-07-04 06:45:19 NA NA  0.4547177
# 2012-07-04 07:00:19 NA NA  1.1712661
head(na.omit(temp))
#                             D1          D2          D3
# 2012-06-27 14:15:19 -0.3329234 -1.63230970  0.75619287
# 2012-06-27 14:30:19  1.3631137 -0.06299626 -1.36131851
# 2012-06-27 14:45:19 -0.4691473 -0.70544686 -0.60876462
# 2012-06-27 15:00:19  0.8428756 -0.31417818 -0.21174696
# 2012-06-27 15:15:19 -1.4579937 -0.26694627 -0.67847242
# 2012-06-27 15:30:19 -0.4003059  0.15315947  0.06665787
tail(na.omit(temp))
#                              D1         D2          D3
# 2012-07-01 16:45:19 -0.49419020  1.1911322  2.73143169
# 2012-07-01 17:00:19 -1.71111303  0.7613245  0.57057667
# 2012-07-01 17:15:19  0.04005805 -0.1210687  1.32083870
# 2012-07-01 17:30:19 -0.56114348 -1.2250590  0.09951626
# 2012-07-01 17:45:19 -2.55736206 -0.1637461 -0.39435301
# 2012-07-01 18:00:19 -0.69677881 -1.3138963  0.63649492

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接