如何使用索引而不是字符串查询xts时间范围

时间:2013-04-26 15:28:27

标签: r xts

我可以使用两个以“/”分隔的时间字符串查询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对象索引(a [4])和索引(a [7])在不同的 xts对象上运行相同的范围查询?我是否必须将索引转换为字符串,或者使用整数值有更快的方法,例如自POSIXlt中嵌入的纪元以来的秒数?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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