对于经验丰富的R程序员来说,这应该相当简单,但我似乎无法在线找到解决方案。
我试图将xts对象sym.rank
中的列绑定到第二个现有对象A
的末尾,但结果会增加行数。来自sym.rank
的数据实际上已向下移动,而不是与A
中的数据正确对齐。
> str(A)
An ‘xts’ object on 2005-01-31/2012-12-31 containing:
Data: num [1:96, 1:6] 35.5 33.8 33.6 33.3 31.9 ...
-attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:6] "XLY.Open" "XLY.High" "XLY.Low" "XLY.Close" ...
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 2
$ src : chr "yahoo"
$ updated: POSIXct[1:1], format: "2017-01-27 00:42:13"
> str(sym.rank)
An ‘xts’ object on 2005-01-31/2012-12-31 containing:
Data: num [1:96, 1:5] NA NA 5 5 4 2 2 3 5 5 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr
[1:5] "XLY.Adjusted" "XLP.Adjusted" "XLE.Adjusted" "AGG.Adjusted" ...
Indexed by objects of class: [POSIXct,POSIXt] TZ:
xts Attributes:
NULL
>sym.rank
XLY.Adjusted XLP.Adjusted XLE.Adjusted AGG.Adjusted IVV.Adjusted
2005-01-31 NA NA NA NA NA
2005-02-28 NA NA NA NA NA
2005-03-31 5 3 1 4 2
2005-04-30 5 2 4 1 3
2005-05-31 4 3 5 1 2
2005-06-30 2 5 1 4 3
> A
XLY.Open XLY.High XLY.Low XLY.Close XLY.Volume XLY.Adjusted
2005-01-31 35.45 35.55 33.23 33.78 5464600 28.49650
2005-02-28 33.82 34.36 33.33 33.60 5813500 28.34465
2005-03-31 33.60 34.40 32.71 33.16 10675600 28.01342
2005-04-30 33.30 33.47 30.62 31.05 12504000 26.23090
2005-05-31 31.92 33.18 31.04 32.97 9032100 27.85291
2005-06-30 33.10 33.88 32.68 32.78 7248700 27.73284
> cbind(A,sym.rank[,1])
XLY.Open XLY.High XLY.Low XLY.Close XLY.Volume XLY.Adjusted XLY.Adjusted.1
2005-01-30 NA NA NA NA NA NA NA
2005-01-31 35.45 35.55 33.23 33.78 5464600 28.49650 NA
2005-02-27 NA NA NA NA NA NA NA
2005-02-28 33.82 34.36 33.33 33.60 5813500 28.34465 NA
2005-03-30 NA NA NA NA NA NA 5
2005-03-31 33.60 34.40 32.71 33.16 10675600 28.01342 NA
正如您所看到的,cbind
命令的结果会引入不需要的行,sym.rank
中的实际值会引入不需要的行。
任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
注意str()
输出的“由对象索引...”部分。
> str(A)
#...
Indexed by objects of class: [Date] TZ: UTC # Date index, UTC timezone
> str(sym.rank)
#...
Indexed by objects of class: [POSIXct,POSIXt] TZ: # POSIXct index, no timezone
Date
个对象没有时区,因此它们始终在xts索引中以UTC格式处理。 POSIXct
(和POSIXlt
)个对象总是有时区。如果未指定timezone属性,则确定并使用计算机的当前时区(如何完成此操作取决于您的操作系统和设置)。
您没有说明如何创建sym.rank
,但不知何故,您使用POSIXct
索引创建了它。由于您只有每日数据,因此应使用Date
索引。您可以通过以下方式进行转换:
index(sym.rank) <- as.Date(index(sym.rank))
# now this should work without adding rows
merge(A, sym.rank)