2017-03-24 72 views
-1

我試圖加載數據集到R和改變列的類型爲日期時間。把字符串到日期時間

strptimeas.POSIXctas.Date對於不同的情況應該可以工作;

這是我的代碼:

a <- structure(list(DATE = c("01/01/2011 12:00:00", "01/02/2011 12:00:00", 
    "01/03/2011 12:00:00", "01/04/2011 12:00:00", "01/05/2011 12:00:00", 
    "01/06/2011 12:00:00"), VAL = c(65.34447917, 65.23983333, 65.03183333, 
    64.89107292, 64.83333333, 64.848625), id = c("VT1-1", "VT1-1", "VT1-1", 
    "VT1-1", "VT1-1", "VT1-1")), .Names = c("DATE", "VAL", "id"), row.names = c(NA, -6L), 
    class = c("tbl_df", "tbl", "data.frame")) 

b1 <- as.POSIXct(a$DATE, format = "%m/%d/%y %H:%M:%S") 
b2 <- strptime(a$DATE,"%m/%d/%Y %H:%M/%S") 

但他們只是返回NA。這很可能是一個錯字;但在處理不同的日期時間格式時如何避免這種情況?

+0

你有一個錯字 - 你用' 「%M /%d /%Y%H:%M /%S」',並在最後一個斜槓。你需要用冒號「%m /%d /%y%H:%M:%S」。但看到我的答案。 –

回答

2
R> library(anytime) 
R> anytime(a$DATE) 
[1] "2011-01-01 12:00:00 CST" "2011-01-02 12:00:00 CST" "2011-01-03 12:00:00 CST" 
[4] "2011-01-04 12:00:00 CST" "2011-01-05 12:00:00 CST" "2011-01-06 12:00:00 CST" 
R> 

的隨時隨地包的建立是爲了使這個簡單的 - 你不必提供你可能會得到錯誤的格式,它只是嘗試了一些似是而非的人的。對於「合理」的投入,它只是工作

+0

恐怕它不起作用,除非你認爲dmy標準是不合理的。它適用於美國的mdy標準,但恐怕dmy是第二常用的(在ymd之後)。它對ymd沒有問題。它像6/9/2018這樣的單個數字也失敗了,它需要尾隨零。我認爲提供格式比依靠啓發式更安全 – Slav

+0

問題是,除非作者將它分類,否則不能區分mm-dd-yyyy和dd-mm-yyyy,並且這確實使得它不合理,因爲它是錯誤的,俯臥。因此,對ISO日期的偏好:yyyy-mm-dd。而且文件很清楚。 –

+0

所以 - 換句話說,你需要提供一個格式,即使你可能弄錯了,而不是你說了什麼。否則,它很容易出錯。與基礎解決方案沒有多大區別,只有一個包裝更少 – Slav