XTSオブジェクトから重複する行を削除します
-
28-10-2019 - |
質問
XTSオブジェクトで重複した行を削除するのに苦労しています。通貨のティックファイナンシャルデータをダウンロードし、それをOHLC形式のXTSオブジェクトに変換するRスクリプトがあります。このスクリプトは、15分ごとに新しいデータをプルします。新しいデータは、今日の最初の取引から今日の最後の記録された取引にダウンロードされます。ダウンロードした古い以前のデータは.RDATA形式で保存され、呼び出されました。次に、新しいデータが古いデータに追加され、.RDATA形式で古いデータを上書きします。
これが私のデータがどのように見えるかの例です。
.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オブジェクトで複製データエントリを削除するにはどうすればよいですか?
解決
そうすべきではありません index(mt.xts)
それよりも mt.xts$Index
?以下は機能しているようです。
# 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 ), ]
他のヒント
私の場合、
x <- x[! duplicated( index(x) ),]
システムは何らかの形で日付時間を各行でユニークにするため、意図したとおりに機能しませんでした。
x <- x[! duplicated( coredata(x) ),]
これは、以前のソリューションが役に立たなかった場合に機能する場合があります。
所属していません StackOverflow