2014-10-02 85 views
2

我有一個動物園對象z用10行和2列如下:添加列動物園對象

Date   Return 
1986-01  0.00308215260513781 
1986-02  0.00305355599484584 
.    . 
.    . 
.    . 
1986-10  0.00349830477430457 

我需要包含z對象從數據幀新列X沿new動物園對象df。所需的輸出應該是這樣的:

Date   Return   X 
1986-01 0.00308215260513781 11 
1986-02 0.00305355599484584 12 
.    .    . 
.    .    . 
.    .    . 
1986-10 0.00349830477430457  20 

我用下面的代碼:

new= merge(z , df$X) 

然而,它給人的結果不理想,但與分配給的z每一行中X每個值。 new對象現在有100行。它還從動物園對象中刪除了日期列。找不到問題出在哪裏。

對於可再現例如:

# get the z object 
structure(c(NA, 0.00308215260513781, 0.00305355599484584, 0.00166059811703964, 
-0.00511749445720536, -0.00145300480100395, -0.00171675339332211, 
-0.00335452754121814, 0.000189812976282344, 0.00349830477430457 
), .Dim = 10L, .Dimnames = list(c("1986-01", "1986-02", "1986-03", 
"1986-04", "1986-05", "1986-06", "1986-07", "1986-08", "1986-09", 
"1986-10"))) 

# get the df data frame 
structure(list(a = 1:10, X = 11:20), .Names = c("a", "X"), row.names = c(NA, 
-10L), class = "data.frame") 
+0

在你DF你沒有一個「約會「列,所以沒有列匹配。這就是爲什麼z的每個值都與df $ x的每個值匹配的原因,這確實導致了行數的增加。正如亨德里克所說,cbind可能取決於你想要的。 – Wave 2014-10-02 11:49:36

+0

@Henrik cbind完成這項工作,但是,它將日期列定義爲一個row.names,我可以將其轉換爲zoo對象。使用cbind之後,將新輸出轉換爲zoo對象有什麼辦法嗎?我還更新了問題中的數據以匹配'dput' – athraa 2014-10-02 11:58:00

回答

3

的問題是,在z的問題是不是動物園對象。

這些要麼將創建一個動物園的對象與z爲第一列和​​作爲第二:

read.zoo(data.frame(rownames(z), Return = z, X = df$X), FUN = as.yearmon) 

merge(Return = zoo(z, as.yearmon(rownames(z))), X = df$X) 

捐贈:

   Return X 
Jan 1986   NA 11 
Feb 1986 0.003082153 12 
Mar 1986 0.003053556 13 
Apr 1986 0.001660598 14 
May 1986 -0.005117494 15 
Jun 1986 -0.001453005 16 
Jul 1986 -0.001716753 17 
Aug 1986 -0.003354528 18 
Sep 1986 0.000189813 19 
Oct 1986 0.003498305 20