首页 > 解决方案 > 按日期向量对 xts 列进行子集化

问题描述

我正在尝试将列分配给另一个 xts 的 data.frame:

dts = c(today() - 2, today() - 1, today())
a = data.frame(a = c(1, 2, 3))
b = data.frame(v = c(.5, .25, 1), date = dts)
b = rbind(b, b)

a = xts(a, order.by = dts)

b$a = coredata(a$a[b$date])

这将返回:

     v       date a
1 0.50 2020-07-06 1
2 0.25 2020-07-07 1
3 1.00 2020-07-08 2
4 0.50 2020-07-06 2
5 0.25 2020-07-07 3
6 1.00 2020-07-08 3

如果我查看“a”列的顺序,它不符合我的预期。为了使“a”列跟随日期列(应该是 1、2、3、1、2、3),我必须更改什么

标签: rxtszoo

解决方案


xts对象自动排序

a = xts(a, order.by = dts)

例如,我在 a 的末尾添加了一些东西,rbind但它是自动排序的,它出现在开头:

rbind(a, a[1])
           a
2020-07-06 1
2020-07-06 1
2020-07-07 2
2020-07-08 3

这正是您在示例中所做的。

一种解决方案是停止使用xts对象进行此操作:

b$a = as.numeric(a)[match(b$date, date(a))]
b
     v       date a
1 0.50 2020-07-06 1
2 0.25 2020-07-07 2
3 1.00 2020-07-08 3
4 0.50 2020-07-06 1
5 0.25 2020-07-07 2
6 1.00 2020-07-08 3

看到这个帖子同样的问题。


推荐阅读