簡體   English   中英

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

[英]How to update a row in a multi-column XTS object?

給定一個單列xts對象,我可以像這樣更新一行:

library(xts)
a=xts(1:5,Sys.Date()+1:5)
b=xts(77:77,Sys.Date()+2)
a[index(b)]=b

但是一旦我有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

如何更新xts對象中的一行?

目前我有這個hack:

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

最簡單的方法是在子命令中使用逗號:

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

一種解決方案是使用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 [index(b),] = b,但是由於某些原因,當我使用它時,我沒有相同的結果。 (它將更改第一個日期,而不是第二個)

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM