2013-03-11 72 views
1

我有一个xts对象。我想为每行取平均值并将其合并回我的对象​​。例如:适用于R中的xts对象

require(xts) 
obj = xts(matrix(1:100, ncol=2), order.by=seq.Date(from=as.Date("2012-01-01"), by=1, length=50)) 
another_obj = apply(obj, 1, mean) 

这现在只是一个以日期作为名称的向量。

class(another_obj) 
    [1] "numeric" 

我可以再次将它转换为xts和使用的名称为order.by然后合并一切恢复OBJ但这是相当繁琐。

another_obj = as.xts(another_obj, order.by=as.Date(names(another_obj))) 
obj = merge(obj, another_obj) 

这样做的正确方法是什么?

回答

4

这将增加一列,每行的平均

obj <- cbind(obj, rowMeans(obj)) 

编辑澄清为什么cbind正在这里:

这里我使用cbind.xts至极是呼叫merge.xts。所以上面相当于:

obj <- merge(obj, rowMeans(obj)) 
+0

谢谢!总是有点担心,只是“混合”时间序列在一起,但我想在这种情况下,它保证他们会排队。 – Alex 2013-03-11 19:54:01

+0

@Alex查看我的更新。 – agstudy 2013-03-11 20:00:54

+0

你能解释这是如何工作的吗? 'rowMeans'将返回一个不是'xts'的向量,那么在这里如何调用合并? – Alex 2013-03-11 20:05:32

2

你的意思是这样的吗?

obj <- as.xts(transform(obj, another_obj=rowMeans(obj))) 
+1

这改变了obj类到'动物园' – 2013-03-11 19:45:54

+0

@geektrader感谢您的评论,我编辑,使类保持'xts' – 2013-03-11 19:47:53

+0

谢谢!将变换首先变成一个'data.frame'? – Alex 2013-03-11 19:53:29