2012-01-14 27 views
2

xtsオブジェクトの重複行を削除する際に問題があります。私は通貨のティック財務データをダウンロードし、それをOHLC形式のxtsオブジェクトに変換するRスクリプトを持っています。このスクリプトは15分ごとに新しいデータを取得します。新しいデータは、今日の最初の貿易から今日の最後に記録された貿易にダウンロードされます。ダウンロードされた古い以前のデータは.Rdata形式で保存され、呼び出されました。新しいデータが古いデータに追加され、古いデータが.Rdata形式で上書きされます。ここでR言語:xtsオブジェクトから重複行を削除する

は私のデータがどのように見えるかの例です:

     .Open .High .Low .Close .Volume .Adjusted 
2012-01-07 00:00:11 6.69683 7.01556 6.38000 6.81000 48387.58 6.81000 
2012-01-08 00:00:09 6.78660 7.20000 6.73357 7.11358 57193.53 7.11358 
2012-01-09 00:00:57 7.08362 7.19100 5.81000 6.32570 148406.85 6.32570 
2012-01-10 00:01:01 6.32687 6.89000 6.00100 6.36000 110210.25 6.36000 
2012-01-11 00:00:07 6.44904 7.13800 6.41266 6.90000 99442.07 6.90000 
2012-01-12 00:01:02 6.90000 6.99700 6.33700 6.79999 140116.52 6.79999 
2012-01-13 00:02:01 6.78211 6.80400 6.40000 6.41000 60228.77 6.41000 
2012-01-14 00:00:23 6.42000 6.50000 6.23150 6.31894 25392.98 6.31894 

私はもう一度スクリプトを実行する場合、私はXTSに新しいデータが追加されます。

     .Open .High .Low .Close .Volume .Adjusted 
2012-01-07 00:00:11 6.69683 7.01556 6.38000 6.81000 48387.58 6.81000 
2012-01-08 00:00:09 6.78660 7.20000 6.73357 7.11358 57193.53 7.11358 
2012-01-09 00:00:57 7.08362 7.19100 5.81000 6.32570 148406.85 6.32570 
2012-01-10 00:01:01 6.32687 6.89000 6.00100 6.36000 110210.25 6.36000 
2012-01-11 00:00:07 6.44904 7.13800 6.41266 6.90000 99442.07 6.90000 
2012-01-12 00:01:02 6.90000 6.99700 6.33700 6.79999 140116.52 6.79999 
2012-01-13 00:02:01 6.78211 6.80400 6.40000 6.41000 60228.77 6.41000 
2012-01-14 00:00:23 6.42000 6.50000 6.23150 6.31894 25392.98 6.31894 
2012-01-14 00:00:23 6.42000 6.75000 6.22010 6.57157 75952.01 6.57157 

ご覧のとおり、最後の行は2番目と最後の行と同じ日です。最後の行を最後の行にして、最後の行を2行目から最後の行まで削除します。重複した行を削除するために次のコードを実行しようとすると、重複した行がそこに残ります。

xx <- mt.xts[!duplicated(mt.xts$Index),] 
xx 
.Open .High .Low .Close .Volume .Adjusted 

私は結果を得られません。インデックスを重複の指標として使用して、xtsオブジェクトの重複データエントリを削除するにはどうすればよいですか?

+0

多分あなたは '!duplicated(mt.xts)'を意味しましたか? – joran

+0

私はrow.namesに基づいて削除する方法を見つけるか、.Openと.Adjustedの両方を重複行のインジケータとして使用する必要があると考えていました。将来、オープンおよび調整値が異なる日付で同じである可能性があるため、索引を使用すると最適です。 – Kevin

+0

@joran xx =!duplicated(mt.xts)を実行すると、論理ベクトルだけが得られます。私が前にしたことの以前の使用では、動作するように見えましたが、そのオブジェクトはxtsではありませんでした。 – Kevin

答えて

10

mt.xts$Indexではなく、index(mt.xts)となるはずですか? 次のように動作します。

# Sample data 
library(xts) 
x <- xts( 
    1:10, 
    rep(seq.Date(Sys.Date(), by="day", length=5), each=2) 
) 

# Remove rows with a duplicated timestamp 
y <- x[ ! duplicated(index(x)), ] 

# Remove rows with a duplicated timestamp, but keep the latest one 
z <- x[ ! duplicated(index(x), fromLast = TRUE), ] 
+0

ええ、それは基本的に私が得ていたものです。 – joran

+0

これは、重複した行を削除します。唯一の問題は、最後に複製された行を削除することです。私は新しいデータを追加しているので、以前の複製行を削除したいと思います。 – Kevin

+0

apply(lag(x $ .Open、-1)== x $ .Open、1、all)のようなlag()の使用を考えていた – Kevin

関連する問題