當我嘗試將12小時轉換爲24小時時,我無法獲得正確的轉換。我的腳本(帶有示例數據如下)。轉換12小時至24小時格式在R
library(lubridate)
library(data.table)
# Read Sample Data
df <- data.frame(c("April 22 2016 10:49:15 AM","April 22 2016 10:01:21 AM","April 22 2016 09:06:40 AM","April 21 2016 09:50:49 PM","April 21 2016 06:07:18 PM"))
colnames(df) <- c("Date") # Set Column name
dt <- setDT(df) # Convert to data.table
ff <- function(x) as.POSIXlt(strptime(x,"%B %d %Y %H:%M:%S %p"))
dt[,dates := as.Date(ff(Date))]
當我嘗試創建一個名爲TOD新的變量,我得到H中輸出:M:S格式而不將其轉換爲24小時格式。 我的意思是,第三排,而不是21:50:49我得到09:50:49。我嘗試了兩種不同的方式來做到這一點。一個使用as.ITime從data.table,然後也使用strptime。我用來計算TOD的代碼如下。
dt[,TOD1 := as.ITime(ff(Date))]
dt$TOD2 <- format(strptime(dt$Date, "%B %d %Y %H:%M:%S %p"), format="%I:%M:%S")
我想到了使用數據框,而不是data.table消除與data.table使用strptime,仍然得到了同樣的回答任何問題,嘗試它。
df$TOD <- format(strptime(df$Date, "%B %d %Y %H:%M:%S %p"), format="%I:%M:%S") # Using dataframe instead of data.table
有關如何獲得正確答案的任何見解?
您的初始翻譯結束了。改爲:'dt $ TOD2 < - format(strptime(dt $ Date,「%B%d%Y%I:%M:%S%p」),format =「%H:%M:%S」 )'。我切換了%I和%H。 – lmo
我嘗試了您的轉換,並且最初沒有起作用。然後,我意識到在data.table導致問題之前調用lubridate。當我只用data.table運行它時,它按預期運行並給了我正確的答案。謝謝。 – Krishnan