2017-09-26 6 views
0

이 datetime에 대해 R에서 datetime을 파싱 할 때 여러 가지 방법을 시도했지만 lubridate :: mdy_hm이 작동하는 것처럼 보였으 나 하나의 배열 요소?압축 된 날짜 시간을 구문 분석 할 때 연도와 시간이 분리 된 문자가없는 경우

datetimes <- c("10/6/20176:00 PM EDT", "10/16/20171:00 PM EDT", "10/6/201711:00 PM EDT", "10/16/201711:00 PM EDT") 

substrRight <- function(x, n){ 
    substr(x, nchar(x)-n+1, nchar(x)) 
} 

(time_with_bad_nas <- substrRight(datetimes, 11)) # two should be 11:00 PM ET 
(date_with_bad_nas <- substr(datetimes, 0, 10)) # two are capturing the hour in the year 

lubridate::mdy_hm(datetimes[1], tz = "America/New_York") 
lubridate::mdy_hm(datetimes, tz = "America/New_York") 

datetimes[1] == "10/6/20176:00 PM ET" 
+0

'(\ D +) \/(\ D +) \/(\ d를 {4}) (\ D +) : [여기] (https://regex101.com/r/2WWKvv/3)와 같이 (\ d +) \ s + ([ap] m) \ s + ([az] +)'각 부분을 가져옵니다. 잠재적으로 2 년 형식을 사용해야하는 경우 다음을 사용하십시오 :'(\ d +) \/(\ d +) \/(\ d {4} | \ d {2}) (\ d +) : (\ d +) \ s + ([ap] m) \ s + ([az] +)': https://regex101.com/r/2WWKvv/2 – ctwheels

답변

3

하나가 시도 할 수 :

as.POSIXct(datetimes, format = "%m/%d/%Y%I:%M %p", tz = "America/New_York") 

출력 :

"2017-10-06 18:00:00 EDT" "2017-10-16 13:00:00 EDT" "2017-10-06 23:00:00 EDT" "2017-10-16 23:00:00 EDT"