2012-01-14 10 views
2

xts 객체에서 중복 행을 삭제하는 데 문제가 있습니다. 통화의 틱 재무 데이터를 다운로드하여 OHLC 형식의 xts 개체로 변환하는 R 스크립트가 있습니다. 이 스크립트는 15 분마다 새로운 데이터를 가져옵니다. 새로운 데이터는 오늘의 첫 번째 거래에서 오늘 마지막으로 기록 된 거래로 다운로드됩니다. 다운로드 한 이전 이전 데이터는 .Rdata 형식으로 저장되고 호출되었습니다. 그런 다음 새 데이터가 이전 데이터에 추가되고 오래된 데이터를 .Rdata 형식으로 덮어 씁니다. 내가 스크립트가 다시 나는 XTS에 새로운 데이터를 추가합니다 실행하면 이제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 

: 여기

내 데이터를 어떻게 생겼는지의 예입니다.

     .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 

마지막으로 볼 수 있듯이 마지막 줄은 두 번째 줄부터 마지막 ​​줄까지입니다. 나는 마지막 날짜에 대한 마지막 행을 유지하고 마지막 행에 대한 두 번째 행을 삭제하려고합니다. 중복 된 행을 삭제하기 위해 다음 코드를 시도하면 작동하지 않습니다. 중복 된 행은 그대로 있습니다.

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

(lag (x $ .Open, -1) == x $ .Open, 1, all)과 같은 lag()을 사용하려고 생각했습니다. – Kevin