2014-10-02 95 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