根据R中的另一个xts对象向xts对象添加列

时间:2012-03-13 13:30:42

标签: r xts

我有一个主要的XTS对象“数据”,其中包含跨越22天的约1M行。我有另一个XTS对象“Set”有22行,每天有1个条目。我想将这个较小的XTS对象组合成较大的XTS对象,这样它就会有一个额外的列包含当天Set中的值。

首先我尝试了:

> Data=cbind(Data,as.numeric(Set[as.Date(index(Data[]))]))
Error in error(x, ...) : 
improper length of one or more arguments to merge.xts

然后我尝试了:

> Data=cbind(Data,1)
> Data[,6]=as.numeric(Set[as.Date(index(Data[,6]))])
Error in NextMethod(.Generic) : 
  number of items to replace is not a multiple of replacement length

我也试过没有as.numeric但收到了同样的错误。我尝试将Data转换为data.frame并得到错误:

Error in `[<-.data.frame`(`*tmp*`, , 6, value = c(1, 397.16, 397.115,  : 
  replacement has 22 rows, data has 835771

我做错了什么,我该如何做到这一点?我过去两周才使用过R。

谢谢!

> str(Data)
An ‘xts’ object from 2012-01-03 05:01:05 to 2012-01-31 14:59:59 containing:
  Data: num [1:835771, 1:5] 397 397 397 397 397 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:5] "SYN" "\"WhitePack.BID_SIZE\"" "\"WhitePack.BID_PRICE\"" "\"WhitePack.ASK_PRICE\"" ...
  Indexed by objects of class: [POSIXct,POSIXt] TZ: 
  xts Attributes:  
 NULL
> str(Set)
An ‘xts’ object from 2012-01-02 to 2012-01-31 containing:
  Data: chr [1:22, 1] "  1.000" "397.160" "397.115" "397.175" "397.200" "397.390" "397.560" "397.580" "397.715" ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr "Settle"
  Indexed by objects of class: [POSIXct,POSIXt] TZ: 
  xts Attributes:  
 NULL

1 个答案:

答案 0 :(得分:1)

你获得成功:

df3 <- merge(Data, Set)

为了解决我对原始问题缺乏充分理解的问题,我认为唯一的另一步是:

df3[, 6]  <- na.locf( df3[, 6] )