矢量赋值给xts对象的奇怪行为:与预期相反

时间:2014-07-10 20:03:26

标签: r xts

我想对特定日期进行矢量分配,恰好与xts索引的顺序相反:

# create xts index and an all-zeroes instance of xts
idx <- seq.Date( as.Date("2011-01-01"), as.Date("2011-10-01"), by='month' )
x <- xts( seq_along(idx), idx ) 

# create a dataframe with "yearmo" and some data. note reverse order of yermo from idx
d <- data.frame( yearmo=201110:201101, data=10:1 )

# assign d$data to "proper" location in timeseries 
dateVec <- as.Date( paste0( d$yearmo, "01" ), format="%Y%m%d" )
x[ dateVec ] <- d$data

根据我对R中向量运算的了解,这应该可以为时间序列中的每个值分配数据框中的相应值,其中"2011-01-01"的值为1.相反,价值相反,如下所示:

           [,1]
2011-01-01   10
2011-02-01    9
2011-03-01    8
2011-04-01    7
2011-05-01    6
2011-06-01    5
2011-07-01    4
2011-08-01    3
2011-09-01    2
2011-10-01    1

而我期待

           [,1]
2011-01-01    1
2011-02-01    2
2011-03-01    3
2011-04-01    4
2011-05-01    5
2011-06-01    6
2011-07-01    7
2011-08-01    8
2011-09-01    9
2011-10-01   10

我已经检查了xts documentation和一些类似的问题,但我找不到任何人遇到类似的问题。一次分配多个xts值的正确方法是什么?我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果我解决你的拼写错误和错误,我的工作正常。

idx <- seq.Date(as.Date("2011-01-01"), as.Date("2011-10-01"), by="month")
x <- xts(seq_along(idx), idx) # t() is a function

# create a dataframe with "yearmo" and some data.
# note reverse order of yermo from idx
d <- data.frame(yearmo=201110:201101, data=10:1) # df() is a function

# assign d$data to "proper" location in timeseries 
dateVec <- as.Date(paste0(d$yearmo, "01"), format="%Y%m%d") # fix typo
x[dateVec] <- d$data

编辑:对不起,我没有注意到输出与您的预期相反。问题是因为您的日期是降序。如果它们按升序排列,这将有效。

d <- d[order(d$yearmo),]
dateVec <- as.Date(paste0(d$yearmo, "01"), format="%Y%m%d")
x[dateVec] <- d$data

也就是说,这可能是一个错误......但是xts:::[<-.xts是一个核心的xts函数,几乎触及了所有其他xts函数,所以我必须在决定它是否值得之前广泛测试补丁试图解决。