2013-08-05 7 views
2

as.POSIXct과 관련된 이상한 행동을 이해하고 해결하기 위해 도움이 필요합니다.POSIXct의 이상한 변환 문제

저는 세 가지 미터에서 15 분 간격으로 수집 한 3 년간의 광 데이터로 작업하고 있습니다. 이 데이터를 다른 데이터 세트와 대조하기 위해 나는 동물원을 사용하여 5 분 간격으로 보간 된 빛 측정을 작성하려고합니다.

as.POSIXct으로 날짜와 시간을 변환 할 때 이상한 문제가 발생합니다. 변환은 대부분의 데이터 세트에서 올바르게 작동하지만 세 가지 특정 기간 동안 1 시간 뒤로 일관되게 설정합니다. 03/13/11 2:00:00 - 2:45:00, 03/11/12 2:00 : 00 - 2:45:00 및 03/10/13 2:00:00 - 2:45:00. 아래의 R 콘솔에서 결과를 게시했습니다. 아무도이 동작을 설명하고 해결책을 제안 할 수 있습니까?

> Ldata <- read.csv("9813306_LI_AIRTEM_HENGILL2_SUM.csv") 

    > head(Ldata) 

     X.  date  time Temp_C Light_lux 
     1 1 10/29/10 15:30:00 2.195 3444.5 
     2 2 10/29/10 15:45:00 1.330 3100.0 
     3 3 10/29/10 16:00:00 1.330 3100.0 
     4 4 10/29/10 16:15:00 1.221 2927.8 
     5 5 10/29/10 16:30:00 1.221 2152.8 
     6 6 10/29/10 16:45:00 1.112 1463.9 

    > str(Ldata) 
     'data.frame': 88417 obs. of 5 variables: 
     $ X.  : int 1 2 3 4 5 6 7 8 9 10 ... 
     $ date  : Factor w/ 923 levels "1/1/11","1/1/13",..: 105 105 105 105 105 105 105 105 105 105 ... 
     $ time  : Factor w/ 98 levels "0:00:00","0:15:00",..: 33 34 35 36 37 38 39 40 41 42 ... 
     $ Temp_C : num 2.19 1.33 1.33 1.22 1.22 ... 
     $ Light_lux: num 3444 3100 3100 2928 2153 ... 

P_datetime 1 시간 빠른 시간 열보다 어떻게 문제를 나에게

 > Ldata[c(12908:12911, 44194:44197, 79136:79139),] 
       X. date time Temp_C Light_lux 
     12908 12908 3/13/11 2:00:00 -5.496   0 
     12909 12909 3/13/11 2:15:00 -5.249   0 
     12910 12910 3/13/11 2:30:00 -5.995   0 
     12911 12911 3/13/11 2:45:00 -6.246   0 
     44194 44197 3/11/12 2:00:00 0.674   0 
     44195 44198 3/11/12 2:15:00 0.563   0 
     44196 44199 3/11/12 2:30:00 0.453   0 
     44197 44200 3/11/12 2:45:00 0.343   0 
     79136 79139 3/10/13 2:00:00 -2.494   0 
     79137 79140 3/10/13 2:15:00 -2.610   0 
     79138 79141 3/10/13 2:30:00 -2.377   0 
     79139 79142 3/10/13 2:45:00 -2.610   0 

> P_datetime <- as.POSIXct(paste(Ldata$date, Ldata$time), format = "%m/%d/%y %H:%M:%S") 
> Ldata_m <- cbind(Ldata, P_datetime) 

공지 사항을 제공 데이터의 부분이다.

> Ldata_m[duplicated(Ldata_m$P_datetime),] 
    X. date time Temp_C Light_lux   P_datetime 
    12908 12908 3/13/11 2:00:00 -5.496   0 2011-03-13 01:00:00 
    12909 12909 3/13/11 2:15:00 -5.249   0 2011-03-13 01:15:00 
    12910 12910 3/13/11 2:30:00 -5.995   0 2011-03-13 01:30:00 
    12911 12911 3/13/11 2:45:00 -6.246   0 2011-03-13 01:45:00 
    44194 44197 3/11/12 2:00:00 0.674   0 2012-03-11 01:00:00 
    44195 44198 3/11/12 2:15:00 0.563   0 2012-03-11 01:15:00 
    44196 44199 3/11/12 2:30:00 0.453   0 2012-03-11 01:30:00 
    44197 44200 3/11/12 2:45:00 0.343   0 2012-03-11 01:45:00 
    79136 79139 3/10/13 2:00:00 -2.494   0 2013-03-10 01:00:00 
    79137 79140 3/10/13 2:15:00 -2.610   0 2013-03-10 01:15:00 
    79138 79141 3/10/13 2:30:00 -2.377   0 2013-03-10 01:30:00 
    79139 79142 3/10/13 2:45:00 -2.610   0 2013-03-10 01:45:00 

답변

2

이것은 일광 절약 시간으로 인한 것입니다. 당신은 데이터가 기록 된 시간대를 일치하도록 as.POSIXct 호출에서 tz= 인수를 설정해야 사용자가 설정 한 예를 들어, 아무 문제가 없습니다 tz="UTC" :.

> as.POSIXct(paste(Ldata$date, Ldata$time), format="%m/%d/%y %H:%M:%S", tz="UTC") 
# [1] "2011-03-13 02:00:00 UTC" "2011-03-13 02:15:00 UTC" 
# [3] "2011-03-13 02:30:00 UTC" "2011-03-13 02:45:00 UTC" 
# [5] "2012-03-11 02:00:00 UTC" "2012-03-11 02:15:00 UTC" 
# [7] "2012-03-11 02:30:00 UTC" "2012-03-11 02:45:00 UTC" 
# [9] "2013-03-10 02:00:00 UTC" "2013-03-10 02:15:00 UTC" 
# [11] "2013-03-10 02:30:00 UTC" "2013-03-10 02:45:00 UTC"