2017-05-19 16 views
1

개가 xts 변경 데이터 집합을 만들면 일부 데이터가 손실 된 것으로 보입니다 (약 3000 데이터가 33 000 이상 손실 됨).R : <code>data.frame</code>에서 <code>xts</code> 개체를 만들 때

내 데이터 세트는 다음과 같다 : 형식에 내가 날짜의 다른 부분 (적어도 내가 나오지 않았어를 추출했다 인해 (시간과 일 - 월 - 년되고, 유럽 연합 (EU) 형식)

> head(mesdonnees) 
       time value 
1 05-03-2006 04:07 NA 
2 05-03-2006 04:17 NA 
3 05-03-2006 04:27 NA 
4 05-03-2006 04:37 NA 
5 05-03-2006 04:47 NA 
6 05-03-2006 04:57 NA 

이 형식으로 작업하려면 as.POSIXct을 얻지 마십시오.) 여기 내가 그것을 어떻게 있습니다 :

# Extract characters and define as S.... 
Syear <- substr(mesdonnees$time, 7,10) 
Smonth <- substr(mesdonnees$time, 4,5) 
Sday <- substr(mesdonnees$time, 1, 2) 

#Gather all parts and use "-" as sep 
datetext <- paste(Syear, Smonth, Sday, sep="-") 
#define format of each part of the string 
formatdate<-as.POSIXct(datetext, format="%Y-%m-%d", tz = "GMT") 

그때 ... 내 xts로 만들려고

xtsdata <- xts(mesdonnees$value, order.by = formatdate, tz = "GMT") 

...하지만이 일을 할 때 나는 몇 가지 매우 이상한 결과를 얻을 : 첫 번째 값을

> xtsdata[30225:30233,] 
      [,1] 
2006-12-31 0 
2006-12-31 0 
2006-12-31 0 
2006-12-31 0 
<NA>   NA 
<NA>   NA 
<NA>   NA 
<NA>   NA 
<NA>   NA 
0 : 1900

> head(xtsdata) 
      [,1] 
1900-01-04 NA 
2006-03-05 NA 
2006-03-05 NA 
2006-03-05 NA 
2006-03-05 NA 
2006-03-05 NA 

많은 (3000) 날짜가 유지되지 않습니다에

에서 같은 줄 수 있어야 무엇을 볼 때 모두 내 data.frame 내가 선이 (필자는 xts 객체 생성 변경 날짜 형식 있었다) 오프셋 것을 알 수 있습니다 내 xts : 얼마나

> mesdonnees[25617,] 
        time value 
25617 08-11-2006 23:51  0 
> xtsdata[25617,] 
      [,1] 
2006-11-25 0.27 

을 그게 내 데이터가 상쇄되는거야? tz을 변경하려고 시도했지만 영향을주지 않습니다. dyplr package을 사용하여 모든 복제본을 제거했지만 xts 결과에도 영향을 미치지 않습니다. 도와 줘서 고마워! 여호수아가 제시 한 하나에 내 xts 코드를 변경 한 후


:

xtsdata <- xts(mesdonnees$value, order.by = as.POSIXct(mesdonnees$time, tz = "GMT", format = "%d-%m-%Y %H:%M")) 

은 ... 내 데이터는 "마지막"부분을 제대로 보여,하지만 지금은 다른 문제가 있습니다. 나는이 오류를 발견하기 전에 그것은 날짜 형식에 의한라고 생각

> view(xtsdata): 
0206-06-30 23:08:00 NA 
0206-06-30 23:18:00 NA 
0206-06-30 23:28:00 NA 
1900-01-04 12:00:00 NA 
2006-03-05 04:07:00 NA 
2006-03-05 04:17:00 NA 

(xtsdata[1500,]를 사용하여 (또는 행 < 2300) 같은 결과를 표시) 할 때 첫 번째 2300 데이터는 다음과 같은 결과를 보여; 어쩌면 그렇지 않은 것일까 요? 요청으로

> mesdonnees[2360,] 
       time value 
2360 23-03-2006 03:09 NA 
> xtsdata[2360,] 
        [,1] 
2006-03-05 09:07:00 NA 

:

> str(mesdonnees) 
'data.frame': 32556 obs. of 2 variables: 
$ time : chr "05-03-2006 04:07" "05-03-2006 04:17" "05-03-2006 04:27" "05-03-2006 04:37" ... 
$ value: num NA NA NA NA NA NA NA NA NA NA ... 

그리고 필요한 경우 :

또한, xtsdata을 볼 때 나는 같은 행에 대해 동일한 결과 (마지막 행이 올바른 생각이다)를하지 않습니다
+0

'str (mesdonnees)'의 결과를 질문에 편집하십시오. –

답변

0

문제는 시간 소인의 날짜 부분을 datetextformatdate에만 포함 시키지만 데이터에는 날짜와 시간이 포함됩니다.

또한 모든 문자열 하위 집합을 수행 할 필요가 없습니다. as.POSIXct 호출에서 format 인수를 지정하면 동일한 결과를 얻을 수 있습니다.

xtsdata <- xts(mesdonnees$value, 
       as.POSIXct(mesdonnees$times, "GMT", format = "%d-%m-%Y %H:%M") 
+0

안녕하세요, 귀하의 솔루션은 내 데이터의 마지막 부분 (날짜로 변환되지 않은 부분)에 적용되었습니다. 하지만 여전히 데이터 세트의 시작 부분에는 작동하지 않습니다. (자세한 내용은 게시물을 편집합니다) – legardien

+0

문제는 datetimes가 두 가지 (또는 그 이상) 다른 형식으로되어 있다는 것입니다. 'as.POSIXct' 호출을'anytime :: anytime' 또는'lubridate :: ymdhms'로 대체해야합니다. –

+0

예, 초기 데이터 세트에 날짜 형식이 엉망인 것을 알지 못했습니다. 연도가 잘못 작성됩니다 ("2006"대신 "206"). 문제를 지적 해 주셔서 감사합니다. 문제가 해결되었습니다. – legardien