【问题标题】:subsetting xts column by date vector按日期向量对 xts 列进行子集化
【发布时间】:2020-10-29 03:12:54
【问题描述】:

我正在尝试从另一个 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),我必须更改什么

【问题讨论】:

    标签: r xts zoo


    【解决方案1】:

    xts 对象自动排序

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

    例如,我在 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
    

    请参阅this post 了解相同的问题。

    【讨论】:

      猜你喜欢
      • 2017-07-25
      • 2016-12-27
      • 2017-11-14
      • 2017-09-06
      • 2014-07-30
      • 2016-01-14
      • 2014-02-02
      • 1970-01-01
      • 2012-12-15
      相关资源
      最近更新 更多