我正在從 chr 轉換為 POSIXct 格式為“%Y-%m-%d %H:%M:%S 但是,資料集中的某些時間沒有秒部分(%S)所以當我轉換為DateTime 沒有秒的時間作為空單元格回傳 - NA 我如何確保這不會發生。我希望它們都作為 DateTime 回傳,無論是否缺少某些時間部分?
這種格式的日期時間 ("%Y-%m-%d %H:%M:%S") 正確回傳為 POSIXct
但是這種格式的日期時間 ("%Y-%m-%d %H:%M") 回傳為 NA
這是用于轉換的代碼
trips$ended_at <- as.POSIXct(trips$ended_at, format = "%Y-%m-%d %H:%M:%S")
它是一個巨大的資料集,有超過一百萬個條目,所以我什至不知道哪個日期時間沒有秒部分。有沒有辦法讓那些沒有秒部分的人可以只有零和結尾?例如,2020-29-04 01:57 轉換為 POSIXct 時將回傳為 2020-29-04 01:57:00
請幫忙!
uj5u.com熱心網友回復:
這是我采用的方法,ifelse()假設您正在處理兩種可能性 - 有和沒有秒
date_time <- c("2020-01-18 20:12:16", "2020-01-18 20:12")
ifelse(nchar(date_time) == 16,
format(as.POSIXct(date_time, format="%Y-%m-%d %H:%M"), "%Y-%m-%d %H:%M:%S"),
format(as.POSIXct(date_time, format="%Y-%m-%d %H:%M:%S"), "%Y-%m-%d %H:%M:%S"))
uj5u.com熱心網友回復:
這是我通常做的。在 POSIXct 格式化之前檢查字串的長度nchar(),將結果存盤在新列中,例如:
trips$check<-nchar(trips$ended_at)
然后檢查所有trips$ended_at的長度是否相同,并為那些沒有的添加缺少的秒數:
trips$ended_at_new<-ifelse(trips$check==19,trips$ended_at,paste(trips$ended_at,":00",sep=""))
您可以將 19 換成您正在使用的任何日期時間格式。重要說明:這僅適用于時間戳末尾缺少秒數的情況,而不適用于由于任何其他原因時間戳少于 19 個字符的情況。
uj5u.com熱心網友回復:
兩種方法:
將文字連接
:00到只有小時/分鐘的時間戳的末尾:as.POSIXct(trips$ended_at, format = "%Y-%m-%d %H:%M:%S") # [1] "2020-04-29 01:57:00 EDT" "2020-04-29 01:57:00 EDT" # [3] "2020-04-29 01:57:00 EDT" NA # [5] "2020-04-29 01:57:00 EDT" gsub("( [0-9] :[0-9] )$", "\\1:00", trips$ended_at) # [1] "2020-04-29 01:57:00" "2020-04-29 01:57:00" "2020-04-29 01:57:00" # [4] "2020-04-29 01:57:00" "2020-04-29 01:57:00" as.POSIXct(gsub("( [0-9] :[0-9] )$", "\\1:00", trips$ended_at), format = "%Y-%m-%d %H:%M:%S") # [1] "2020-04-29 01:57:00 EDT" "2020-04-29 01:57:00 EDT" # [3] "2020-04-29 01:57:00 EDT" "2020-04-29 01:57:00 EDT" # [5] "2020-04-29 01:57:00 EDT"如果您有多種“候選”格式需要嘗試,您可以反復遍歷它們。此回圈遍歷格式,將最可能的候選放在最前面。如果在任何時候所有時間戳都已轉換,則它會提前退出
for回圈。candidates <- c("%Y-%m-%d %H:%M", "%d/%m/%Y %H:%M:%S", "%d/%m/%Y %H:%M") out <- as.POSIXct(trips$ended_at, format = "%Y-%m-%d %H:%M:%S") for (fmt in candidates) { if (!length(isna <- is.na(out))) break out[isna] <- as.POSIXct(trips$ended_at[isna], format = fmt) } out # [1] "2020-04-29 01:57:00 EDT" "2020-04-29 01:57:00 EDT" # [3] "2020-04-29 01:57:00 EDT" "2020-04-29 01:57:00 EDT" # [5] "2020-04-29 01:57:00 EDT"
資料
trips <- data.frame(ended_at = c("2020-04-29 01:57:00", "2020-04-29 01:57:00", "2020-04-29 01:57:00", "2020-04-29 01:57", "2020-04-29 01:57:00"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382547.html
上一篇:如何在java13或更高版本中格式化OffsetDateTime?
下一篇:從csv列中分離日期和時間
