2016-07-29 113 views
0

我有一個時間戳列,我將其轉換爲POSIXct。問題是在同一列中有兩種不同的格式,所以如果我使用更常見的轉換,另一個轉換爲NA。R中的兩個時間戳格式

MC$Date  
12/1/15 22:00  
12/1/15 23:00  
12/2/15  
12/2/15 1:00  
12/2/15 2:00 

我用下面的代碼轉換爲POSIXct:

MC$Date <- as.POSIXct(MC$Date, tz='MST', format = '%m/%d/%Y %H:%M') 

結果:

MC$Date  
15-12-01 22:00:00  
15-12-01 23:00:00  
NA  
15-12-02 01:00:00  
15-12-02 02:00:00 

我一直在使用一個邏輯向量,以確定問題,然後糾正它嘗試,但找不到一個簡單的解決方案。

回答

0

我認爲邏輯向量方法可以工作。也許與臨時向量一起保存解析的日期而不打破未解析的日期。類似這樣的:

dates <- as.POSIXct(MC$Date, tz='MST', format = '%m/%d/%Y %H:%M') 
dates[is.na(dates)] <- as.POSIXct(MC[is.na(dates),], tz='MST', format = '%m/%d/%Y') 
MC$Date <- dates 
4

lubridate包被設計來處理這種情況。

dt <- c(
"12/1/15 22:00", 
"12/1/15 23:00", 
"12/2/15", 
"12/2/15 1:00", 
"12/2/15 2:00" 
) 
dt 
[1] "12/1/15 22:00" "12/1/15 23:00" "12/2/15"  "12/2/15 1:00" "12/2/15 2:00" 
lubridate::mdy_hm(dt, truncated = 2) 
[1] "2015-12-01 22:00:00 UTC" "2015-12-01 23:00:00 UTC" "2015-12-02 00:00:00 UTC" 
[4] "2015-12-02 01:00:00 UTC" "2015-12-02 02:00:00 UTC" 

truncated參數指示可以丟失多少格式。

如果UTC不合適,您可以添加tz參數以指定解析日期的時區。

0

由於所有的日期時間都是用日期和時間之間的空格分開的,因此可以使用strsplit來僅提取日期部分。

extractDate <- function(x){ strsplit(x, split = " ")[[1]][1] } 
MC$Date <- sapply(MC$Date, extractDate) 

然後繼續並轉換任何你喜歡的方式,而不必擔心時間部分阻礙。