3

単一列の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オブジェクトの単一の行を更新するにはどうすればよいですか?

今のところ私はこのハックを持っています:

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
4

2 に答える 2

4

最も簡単な方法は、サブセット化コマンドでコンマを使用することです。

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
于 2012-12-23T15:22:15.070 に答える
1

1つの解決策は、を使用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を使用したいのですが、いくつかの理由で、同じ結果が得られません。(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
于 2012-12-23T10:54:04.633 に答える