2016-07-06 4 views
0

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라는 새로운 변수를 만들면 24 시간 형식으로 변환하지 않고 H : M : S 형식으로 출력됩니다. 제 말은 제 3 행에서 21시 50 분 49 초가 아닌 09:50:49가되는 것입니다. 나는 이것을하기 위해 두 가지 다른 방법을 시도했다. 하나는 data.table에서 asITime으로 사용하고 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에 strptime을 사용하고 여전히 같은 대답을 얻었다에 문제를 제거하는 대신 data.table의 dataframe를 사용하여 노력하고 생각했다.

df$TOD <- format(strptime(df$Date, "%B %d %Y %H:%M:%S %p"), format="%I:%M:%S") # Using dataframe instead of data.table 

정답을 얻는 방법에 대한 통찰력이 있으십니까? 여기

+1

처음 번역이 꺼졌습니다. 이것을 대신 사용하십시오 :'dt $ TOD2 <- format (strptime (dt $ Date, "% B % d % Y % I : % M : % S % p"), ​​format = "% H : % M : % S")'. % I 및 % H를 전환했습니다. – lmo

+0

귀하의 전환을 시도했지만 처음에는 작동하지 않았습니다. 그런 다음 data.table이 문제를 일으키기 전에 lubridate를 호출하는 것을 깨달았습니다. data.table 만 가지고 도망 쳤을 때 예상대로 달렸고 정답을 주었다. 감사. – Krishnan

답변

2

으로는 @lmo, 당신은 ?strptime에서 대신 %H%I 매개 변수를 사용할 필요가 주석 : 진수 (00-23)로

퍼센트의 H
시간을. 특수 예외 문자열 인 ISO8601에서 허용하는 24 시간 입력과 같은 문자열이 허용됩니다.

% I
십진수 (01-12)로시 간.

strptime("April 21 2016 09:50:49 PM", "%B %d %Y %I:%M:%S %p") 
# [1] "2016-04-21 21:50:49 EDT" 
+1

나는 귀하의 전환을 시도했으나 처음에는 작동하지 않았습니다. 그런 다음 data.table이 문제를 일으키기 전에 lubridate를 호출하는 것을 깨달았습니다. data.table 만 가지고 도망 쳤을 때 예상대로 달렸고 정답을 주었다. 감사. – Krishnan

1

당신은 이동 : mdy_hms이 매우 편리하고 당신을 위해 12/24 시간 시간을 담당하면서, 자동 시간대로 UTC를 할당합니다

library(lubridate) 
df$Date <- mdy_hms(df$Date) 

하는 것으로. 필요한 경우 다른 것을 지정할 수 있습니다. 그런 다음 df을 data.table로 변환 할 수 있습니다.

관련 문제