2012-09-22 1 views
0

일회, 재현 할 수없는 데이터가 있으면 죄송합니다.이 문제를 재현하는 방법을 알 수 없습니다. 그러나 나는 적절한 정보뿐만 아니라 내가 한 일에 대한 단계별 목록을 포함시키기 위해 최선을 다할 것이다. 문제 해결에 대한 어떤 생각이라도 대단히 감사하겠습니다. 나는 내가 결국 동물원 변환,하지만 지금은 내가 데이터 프레임으로 유지 R.에 읽어 큰 시계열 데이터 세트가strptime을 사용하면 데이터 세트에 중복 날짜가 발생합니다.

:

내 문제는 이것이다.

> str(Met) 
'data.frame': 568354 obs. of 18 variables: 
$ time_local       : Factor w/ 568354 levels "2006-08-06 03:15:00",..: 1 2 3  4 5 6 7 8 9 10 ... 

참고 - 메트로 $의 time_local 내가와 걱정과 나는 STR 판독의 다른 모든 열을 제거 한 것입니다 : read.csv를 사용하여 나는이 얻을 데이터를보고 str을 사용하여 R.로 데이터를 읽고 . 내가

Dup<-Met$time_local[duplicated(Met$time_local)] 

를 사용하여 중복을 검색하면 내가 strptime

MetStrp<-strptime(Met$time_local, "%Y-%m-%d %H:%M:%S") 
str(MetStrp) 
POSIXlt[1:568354], format: "2006-08-06 03:15:00" "2006-08-06 03:20:00" "2006-08-06 03:25:00" ... 

를 사용하여 POSIXlt 또는 POSIXct 객체에 날짜/시간 데이터를 변환하는 경우

나는 아무것도

str(Dup) 
Factor w/ 568354 levels "2006-08-06 03:15:00",..: 

를 얻을 그 다음에 중복 검색

Dup<-MetStrp[duplicated(MetStrp)] 
> head(Dup) 
[1] "2007-03-11 02:00:00" "2007-03-11 02:05:00" "2007-03-11 02:10:00" 
[4] "2007-03-11 02:15:00" "2007-03-11 02:20:00" "2007-03-11 02:25:00" 
> str(Dup) 
POSIXlt[1:60], format: "2007-03-11 02:00:00" "2007-03-11 02:05:00" "2007-03-11 02:10:00" ... 

나는 이제 동물원을 만들 때 나중에 물건을 버리는 60 개의 복제본을 가지고 있습니다.

그리고 흥미롭게도, 나는 POSIXct

ct<-as.POSIXct(MetStrp) 
str(ct) 
POSIXct[1:568354], format: "2006-08-06 03:15:00" "2006-08-06 03:20:00" "2006-08-06 03:25:00" ... 

에 POSIXlt 형식을 변경하면 나도 같은 중복을 얻을하지만

를 사용하여 중복 된 곳을 찾아 선택하면 시간

Dup<-ct[duplicated(ct)] 
> head(Dup) 
[1] "2007-03-11 01:00:00 PST" "2007-03-11 01:05:00 PST" "2007-03-11 01:10:00 PST" 
[4] "2007-03-11 01:15:00 PST" "2007-03-11 01:20:00 PST" "2007-03-11 01:25:00 PST" 
> str(Dup) 
POSIXct[1:60], format: "2007-03-11 01:00:00" "2007-03-11 01:05:00" "2007-03-11 01:10:00" ... 

에 의해 상쇄

Dup_loc<-which(duplicated(MetStrp) | duplicated(MetStrp,fromLast=TRUE)) 

중복 위치가 120 개 있습니다. 결국 POSIXlt와 POSIXct의 중복이됩니다. POSIXct와

str(Dup_loc) 
int [1:120] 62470 62471 62472 62473 62474 62475 62476 62477 62478 62479 ... 

은 항상 시간이 1 ~ 2 인 날짜 및 중복 확인하려면 2 ~ 3

POSIClt은 항상 시간에서있는 기간 :

Test<-MetStrp[Dup_loc] 


>Test 
[1] "2007-03-11 01:00:00" "2007-03-11 01:05:00" "2007-03-11 01:10:00" 
[4] "2007-03-11 01:15:00" "2007-03-11 01:20:00" "2007-03-11 01:25:00" 
[7] "2007-03-11 01:30:00" "2007-03-11 01:35:00" "2007-03-11 01:40:00" 
[10] "2007-03-11 01:45:00" "2007-03-11 01:50:00" "2007-03-11 01:55:00" 
[13] "2007-03-11 02:00:00" "2007-03-11 02:05:00" "2007-03-11 02:10:00" 
[16] "2007-03-11 02:15:00" "2007-03-11 02:20:00" "2007-03-11 02:25:00" 
[19] "2007-03-11 02:30:00" "2007-03-11 02:35:00" "2007-03-11 02:40:00" 
[22] "2007-03-11 02:45:00" "2007-03-11 02:50:00" "2007-03-11 02:55:00" 
[25] "2008-03-09 01:00:00" "2008-03-09 01:05:00" "2008-03-09 01:10:00" 
[28] "2008-03-09 01:15:00" "2008-03-09 01:20:00" "2008-03-09 01:25:00" 
[31] "2008-03-09 01:30:00" "2008-03-09 01:35:00" "2008-03-09 01:40:00" 
[34] "2008-03-09 01:45:00" "2008-03-09 01:50:00" "2008-03-09 01:55:00" 
[37] "2008-03-09 02:00:00" "2008-03-09 02:05:00" "2008-03-09 02:10:00" 
[40] "2008-03-09 02:15:00" "2008-03-09 02:20:00" "2008-03-09 02:25:00" 
[43] "2008-03-09 02:30:00" "2008-03-09 02:35:00" "2008-03-09 02:40:00" 
[46] "2008-03-09 02:45:00" "2008-03-09 02:50:00" "2008-03-09 02:55:00" 
[49] "2009-03-08 01:00:00" "2009-03-08 01:05:00" "2009-03-08 01:10:00" 
[52] "2009-03-08 01:15:00" "2009-03-08 01:20:00" "2009-03-08 01:25:00" 
[55] "2009-03-08 01:30:00" "2009-03-08 01:35:00" "2009-03-08 01:40:00" 
[58] "2009-03-08 01:45:00" "2009-03-08 01:50:00" "2009-03-08 01:55:00" 
[61] "2009-03-08 02:00:00" "2009-03-08 02:05:00" "2009-03-08 02:10:00" 
[64] "2009-03-08 02:15:00" "2009-03-08 02:20:00" "2009-03-08 02:25:00" 
[67] "2009-03-08 02:30:00" "2009-03-08 02:35:00" "2009-03-08 02:40:00" 
[70] "2009-03-08 02:45:00" "2009-03-08 02:50:00" "2009-03-08 02:55:00" 
[73] "2010-03-14 01:00:00" "2010-03-14 01:05:00" "2010-03-14 01:10:00" 
[76] "2010-03-14 01:15:00" "2010-03-14 01:20:00" "2010-03-14 01:25:00" 
[79] "2010-03-14 01:30:00" "2010-03-14 01:35:00" "2010-03-14 01:40:00" 
[82] "2010-03-14 01:45:00" "2010-03-14 01:50:00" "2010-03-14 01:55:00" 
[85] "2010-03-14 02:00:00" "2010-03-14 02:05:00" "2010-03-14 02:10:00" 
[88] "2010-03-14 02:15:00" "2010-03-14 02:20:00" "2010-03-14 02:25:00" 
[91] "2010-03-14 02:30:00" "2010-03-14 02:35:00" "2010-03-14 02:40:00" 
[94] "2010-03-14 02:45:00" "2010-03-14 02:50:00" "2010-03-14 02:55:00" 
[97] "2011-03-13 01:00:00" "2011-03-13 01:05:00" "2011-03-13 01:10:00" 
[100] "2011-03-13 01:15:00" "2011-03-13 01:20:00" "2011-03-13 01:25:00" 
[103] "2011-03-13 01:30:00" "2011-03-13 01:35:00" "2011-03-13 01:40:00" 
[106] "2011-03-13 01:45:00" "2011-03-13 01:50:00" "2011-03-13 01:55:00" 
[109] "2011-03-13 02:00:00" "2011-03-13 02:05:00" "2011-03-13 02:10:00" 
[112] "2011-03-13 02:15:00" "2011-03-13 02:20:00" "2011-03-13 02:25:00" 
[115] "2011-03-13 02:30:00" "2011-03-13 02:35:00" "2011-03-13 02:40:00" 
[118] "2011-03-13 02:45:00" "2011-03-13 02:50:00" "2011-03-13 02:55:00" 

를 I로 지금까지 볼 수 있습니다, 위의 모든 중복 타임 스탬프가 표시되지 않습니다. 그래서 나는 그 문제가 무엇인지 모르겠다. 그러나 뭔가 잘못된 것이있다.

내가 알 수있는 한, 내가 한 모든 것은 요인 데이터 세트를 시간 기반 데이터 세트로 변환 한 것입니다. 그래서 나는 왜 동물원에 중복 오류가 발생하는지 알지 못하며 duplicated을 사용하여 복제본을 찾지 못합니다.

다시 말씀 드리지만이 문제에 대한 의견은 크게 환영 할 것입니다.

답변

2

나는 "일광 절약 시간"이라는 세 단어가 있습니다. 귀하의 지역에서 2007 년 3 월 11 일이 일광 절약 시간 전환이 발생한 날짜 였다고 제공된 증거를 근거로 예측합니다. 오전 1시 - 2시 사이에 발생합니다.

+0

멋진 일을 시작합니다. 나는 그것이 그 문제의 뿌리라고 생각한다. 그러나 strptime을 사용할 때 tz = ""로 설정해도 문제가 해결되지 않는 것 같습니다. – Vinterwoo

+0

중복 된 모든 전화를 잊어 버립니다. 그냥 POSIXct로 변환 한 다음,'diff (x)'를보십시오. R이 날짜를 올바르게 파싱하게하면 DST 차이점에 따라 달라집니다. –

+0

tz = "UTC"로 설정하면 DST 문제가 제거되고 복제본이 제거되므로 동물원이 다시 한 번 행복해집니다. 감사합니다. DWin 및이 문제를 조사한 모든 사람들에게 감사드립니다. – Vinterwoo