我想对特定日期进行矢量分配,恰好与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
值的正确方法是什么?我错过了什么?
答案 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函数,所以我必须在决定它是否值得之前广泛测试补丁试图解决。