1

我可以通过使用以“/”分隔的两个时间字符串来查询 xts 时间范围:

library(xts)
set.seed(1234)
a = xts(1:10, as.POSIXlt(1366039619, tz="", origin="1970-01-01") + rnorm(10, 0, 3))
                           [,1]
2013-04-15 11:26:51.962906    4
2013-04-15 11:26:55.378802    1
2013-04-15 11:26:56.329886   10
2013-04-15 11:26:57.275780    7
2013-04-15 11:26:57.306643    9
2013-04-15 11:26:57.360104    8
2013-04-15 11:26:59.832287    2
2013-04-15 11:27:00.287374    5
2013-04-15 11:27:00.518167    6
2013-04-15 11:27:02.253323    3

> a['2013-04-15 11:26:57/2013-04-15 11:26:58']
                           [,1]
2013-04-15 11:26:57.275780    7
2013-04-15 11:26:57.306643    9
2013-04-15 11:26:57.360104    8

如何使用 POSIXlt 对象 index(a[4]) 和 index(a[7])在不同的 xts 对象上运行相同的范围查询?我是否必须将索引转换为字符串,或者有更快的方法使用整数值,例如自 POSIXlt 中嵌入的纪元以来的秒数?

4

2 回答 2

0

a[1:10] 将提取前 10 行,你甚至不必告诉它你想要哪些列 a[30:32] 会给你第 30 到 32 行。

于 2013-04-26T16:52:37.573 回答
0

按范围(即长度为 1 的向量包含:或 /)的 ISO 样式字符子集非常快。所以你应该使用这样的东西:

a[paste(index(a)[4],index(a)[7],sep='::')]
                    [,1]
2013-04-15 17:26:57    7
2013-04-15 17:26:57    9
2013-04-15 17:26:57    8
2013-04-15 17:26:59    2
于 2013-04-26T15:58:02.897 回答