2016-12-04 77 views
0

我正在處理一個數據集,該數據集擁有數百萬個時間戳記錄,從2016年1月1日至2016年8月31日。他們被讀取字符和我轉換他們像這樣:R顯示夏令時出現NA

dt$dropoffDT<-strptime(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S") 

他們都正確地轉換,除了記錄從2016年3月13日2和3am的。夏令時從13日上午2點開始。

這些記錄打印日期時間,但似乎記錄爲NA,使我無法進一步操縱字段。這裏是我分離這些記錄的數據集的頭部和摘要:

head(dropDT) 
       dropoffDT 
15403 2016-03-13 02:09:45 
25304 2016-03-13 02:15:52 
314784 2016-03-13 02:01:00 
429343 2016-03-13 02:05:25 
475529 2016-03-13 02:08:00 
503665 2016-03-13 02:00:10 

summary(dropDT) 
    dropoffDT 
Min. :NA 
1st Qu.:NA 
Median :NA 
Mean :NA 
3rd Qu.:NA 
Max. :NA 
NA's :192 

您的想法感激。謝謝!

回答

0

轉換例程有一個日期時間的方法,它是在非DST庫中編碼的。考慮使用 「UCT」(或 「GMT」)爲您的所有時間:

as.POSIXct(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S", usetz=TRUE, tz="UCT") 

MCVE:

dt <- # made with dput(dt) 
structure(list(dropoffDT = structure(c(1L, 5L, 2L, 3L, 4L, 6L 
), .Label = c("2016-03-12 02:09:45", "2016-03-13 02:01:00", "2016-03-13 02:05:25", 
"2016-03-13 02:08:00", "2016-03-13 02:15:52", "2016-03-14 02:00:10" 
), class = "factor")), .Names = "dropoffDT", class = "data.frame", row.names = c(NA, 
-6L)) 

as.POSIXct(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S", usetz=TRUE, tz="GMT") 

[1] "2016-03-12 02:09:45 GMT" "2016-03-13 02:15:52 GMT" 
[3] "2016-03-13 02:01:00 GMT" "2016-03-13 02:05:25 GMT" 
[5] "2016-03-13 02:08:00 GMT" "2016-03-14 02:00:10 GMT" 

我只看到了lubridate方面更高版本。我不是該軟件包的用戶。通過使用字母tz掃描函數使我認爲這些函數需要具有'datetime'格式的參數。

我發現R中的時區參數非常混亂(並且我不是唯一一個:Confused by DateTime offsets。)該提問者具有正確的格式來指定具有偏移量的非DST區域:美國太平洋斯坦塔德區,其中I我將會是tz="Etc/GMT+8",並指出儘管我們的時間有幾個小時需要比倫敦時間少8個小時,但使用了一個加號。

當我工作這些方面我一般都需要做測試:

strftime(Sys.time(), usetz=TRUE, tz="Etc/GMT-7") 
#[1] "2016-12-04 23:53:42 GMT-7" 
# No, it's not midnight here 
strftime(Sys.time(), usetz=TRUE, tz="Etc/GMT+7") 
#[1] "2016-12-04 09:53:52 GMT+7" 

# it's not 9:53A either 
strftime(Sys.time(), usetz=TRUE) 
#[1] "2016-12-04 08:54:13 PST" 
strftime(Sys.time(), usetz=TRUE, tz="Etc/GMT+8") 
#[1] "2016-12-04 08:54:26 GMT+8"