使用 xts 作为查找 table
Use xts as a lookup table
示例数据:
library(xts)
a <- seq(as.POSIXct("2010-01-01 00:00:00"), by = 600, length.out = 3)
b <- c(a, a)
lu <- xts(seq_along(a), a)
lu[b]
[,1]
2010-01-01 00:00:00 1
2010-01-01 00:10:00 2
2010-01-01 00:20:00 3
如何 "look up" b
中时间戳的 lu
值,例如与 b
长度相同的 xts 对象,在本例中为:
[,1]
2010-01-01 00:00:00 1
2010-01-01 00:10:00 2
2010-01-01 00:20:00 3
2010-01-01 00:00:00 1
2010-01-01 00:10:00 2
2010-01-01 00:20:00 3
您预期的结果存在一个小问题; XTS 默认排序时间戳。所以 XTS 对象的结果将是 1,1,2,2,3,3。
以下内容可以给您一些启发:
lu[match(b, index(lu))] #XTS object returned - Timestamps are ordered by default
data.frame(ts = index(lu), lu) [match(b, index(lu)),] #Using dataframes instead reproduce the expected result.
1) 按名称索引 xts 并不是执行此操作的正确包,因为您想要的结果不能是有效的 xts 对象。而是尝试以下不使用任何包的方法。输出向量的名称是时间的字符表示,向量值本身是所需的值:
lutable <- setNames(seq_along(a), a)
lutable[format(b)]
给予:
2010-01-01 00:00:00 2010-01-01 00:10:00 2010-01-01 00:20:00 2010-01-01 00:00:00 2010-01-01 00:10:00 2010-01-01 00:20:00
1 2 3 1 2 3
2) match 另一种可能就是这样使用 match
。结果是对应于 b
:
中的时间的值
v <- seq_along(a) # test values
v[match(b, a)]
## [1] 1 2 3 1 2 3
示例数据:
library(xts)
a <- seq(as.POSIXct("2010-01-01 00:00:00"), by = 600, length.out = 3)
b <- c(a, a)
lu <- xts(seq_along(a), a)
lu[b]
[,1]
2010-01-01 00:00:00 1
2010-01-01 00:10:00 2
2010-01-01 00:20:00 3
如何 "look up" b
中时间戳的 lu
值,例如与 b
长度相同的 xts 对象,在本例中为:
[,1]
2010-01-01 00:00:00 1
2010-01-01 00:10:00 2
2010-01-01 00:20:00 3
2010-01-01 00:00:00 1
2010-01-01 00:10:00 2
2010-01-01 00:20:00 3
您预期的结果存在一个小问题; XTS 默认排序时间戳。所以 XTS 对象的结果将是 1,1,2,2,3,3。
以下内容可以给您一些启发:
lu[match(b, index(lu))] #XTS object returned - Timestamps are ordered by default
data.frame(ts = index(lu), lu) [match(b, index(lu)),] #Using dataframes instead reproduce the expected result.
1) 按名称索引 xts 并不是执行此操作的正确包,因为您想要的结果不能是有效的 xts 对象。而是尝试以下不使用任何包的方法。输出向量的名称是时间的字符表示,向量值本身是所需的值:
lutable <- setNames(seq_along(a), a)
lutable[format(b)]
给予:
2010-01-01 00:00:00 2010-01-01 00:10:00 2010-01-01 00:20:00 2010-01-01 00:00:00 2010-01-01 00:10:00 2010-01-01 00:20:00
1 2 3 1 2 3
2) match 另一种可能就是这样使用 match
。结果是对应于 b
:
v <- seq_along(a) # test values
v[match(b, a)]
## [1] 1 2 3 1 2 3