2017-01-06 20 views
2

我的data.table有一個「模糊」日期時間格式的列:「12/1/2016 15:30」。如何將此日期時間轉換爲R可在data.table中識別的格式,而不使用strptime()並獲取最初轉換爲POSIXlt的警告消息。這個過程很有效,但警告讓我覺得還有另一種方式。如何在不使用strptime的情況下轉換data.table中的模糊日期時間列?

我的數據表:

my_dates <- c("12/1/2016 15:30", "12/1/2016 15:31", "12/1/2016 15:32") 
this <- c("a", "b", "c") 
that <- c(1, 2, 3) 

my_table <- data.table(my_dates, this, that) 

my_table 
    my_dates   this that 
1: 12/1/2016 15:30 1 a 
2: 12/1/2016 15:31 2 b 
3: 12/1/2016 15:32 3 c 

my_table[, my_dates := as.POSIXct(strptime(my_dates, "%m/%d/%Y %H:%M"))] 

Warning message: 
In strptime(my_dates, "%m/%d/%Y %H:%M") : 
POSIXlt column type detected and converted to POSIXct. We do not 
recommend use of POSIXlt at all because it uses 40 bytes to store one date. 

所以,它的工作原理,但我敢打賭,有,我只是忽略了,以避免該警告的技術。我使用了my_table[, dates:= as.POSIXct(dates)],但這會減少日期時間的一部分。我也嘗試過my_table[, dates:= as.POSIXct(dates, "%m/%d/%Y %H:%M")],並且時間也會減少,並重新發出警告。

謝謝你的建議。

回答

2

我們需要format參數,它可以單獨使用as.POSIXct轉換,而不訴諸strptime/as.POSIXct

my_table[, my_dates := as.POSIXct(my_dates, format = "%m/%d/%Y %H:%M")] 
my_table 
#    my_dates this that 
#1: 2016-12-01 15:30:00 a 1 
#2: 2016-12-01 15:31:00 b 2 
#3: 2016-12-01 15:32:00 c 3 

的原因警告是因爲論點as.POSIXct/strptime的順序。如果我們檢查? as.POSIXct,用法

as.POSIXct(X,TZ = 「」,...)

這意味着,沒有指定format,它認爲第二個參數是用於tz

相關問題