R 如何更新多列XTS对象中的行?

R 如何更新多列XTS对象中的行?,r,xts,R,Xts,给定一个列xts对象,我可以像这样更新一行: library(xts) a=xts(1:5,Sys.Date()+1:5) b=xts(77:77,Sys.Date()+2) a[index(b)]=b 但一旦我有2+行,它就会失败,“要替换的项目数不是替换长度的倍数”: 如何更新xts对象中的单行 就目前而言,我有一个技巧: a$x[index(b)]=b$x a$y[index(b)]=b$y 有更好的办法吗 预期结果: > a x y 2012-12-2

给定一个列xts对象,我可以像这样更新一行:

library(xts)
a=xts(1:5,Sys.Date()+1:5)
b=xts(77:77,Sys.Date()+2)
a[index(b)]=b
但一旦我有2+行,它就会失败,“要替换的项目数不是替换长度的倍数”:

如何更新xts对象中的单行

就目前而言,我有一个技巧:

a$x[index(b)]=b$x
a$y[index(b)]=b$y
有更好的办法吗

预期结果:

> a
            x  y
2012-12-24  1 11
2012-12-25 77 78
2012-12-26  3 13
2012-12-27  4 14
2012-12-28  5 15

一种解决方案是使用
coredata
,来操纵矩阵

    coredata(a)[index(a)==index(b)] <- coredata(b)

> a
            x  y
2012-12-24  1 11
2012-12-25 77 78
2012-12-26  3 13
2012-12-27  4 14
2012-12-28  5 15


最简单的方法是在子集命令中使用逗号:

a=xts(1:5,Sys.Date()+1:5);colnames(a)='x';a$y=11:15
b=xts(77:77,Sys.Date()+2);colnames(b)='x';b$y=78:78
a[index(b),]=b

a[index(b),]@agstudy:使用当前在CRAN(0.8-8)上的xts,它对我来说很好。谢谢,我已经确认它有效。(我明白我又被R中的逗号和括号弄糊涂了!)@JoshuaUlrich我有同样的版本。也许是因为我们没有相同的时区。当我使用你的方法时,我会更新我的答案以显示我所拥有的。我无法复制你的第二个案例。我首先尝试不设置TZ,然后使用
Sys.setenv(TZ=“UTC”)
。你能显示
str(a)
str(b)
吗?我正在运行xts的0.8-8版本、zoo的1.7-9版本和R的2.15.2版本。
 a=xts(1:5,Sys.Date()+1:5);colnames(a)='x';a$y=11:15
> b=xts(77:77,Sys.Date()+2);colnames(b)='x';b$y=78:78
> a[index(b),]=b
> a
            x  y
2012-12-23 77 78
2012-12-24  2 12
2012-12-25  3 13
2012-12-26  4 14
2012-12-27  5 15
> b
            x  y
2012-12-24 77 78
a=xts(1:5,Sys.Date()+1:5);colnames(a)='x';a$y=11:15
b=xts(77:77,Sys.Date()+2);colnames(b)='x';b$y=78:78
a[index(b),]=b