2016-07-29 3 views
0

임 POSIXct로 변환중인 시간 스탬프 열이 있습니다. 문제는 동일한 열에 두 가지 형식이 있으므로 더 일반적인 변환을 사용하면 다른 형식이 NA로 변환된다는 것입니다.두 타임 스탬프 형식이 R

MC$Date <- as.POSIXct(MC$Date, tz='MST', format = '%m/%d/%Y %H:%M') 

결과 :

MC$Date  
12/1/15 22:00  
12/1/15 23:00  
12/2/15  
12/2/15 1:00  
12/2/15 2:00 

가 나는 POSIXct로 변환하려면 다음 코드를 사용

MC$Date  
15-12-01 22:00:00  
15-12-01 23:00:00  
NA  
15-12-02 01:00:00  
15-12-02 02:00:00 

내가 그 문제를 식별하여 해결하는 로직 벡터를 사용하여 시도했지만 쉬운 해결책을 찾을 수 없습니다.

답변

0

로직 벡터 접근 방식이 효과가 있다고 생각합니다. 파싱되지 않은 것들을 clobbering하지 않고 파싱 된 날짜를 유지하기위한 임시 벡터와 함께 아마. 이 같은 것을 :

dates <- as.POSIXct(MC$Date, tz='MST', format = '%m/%d/%Y %H:%M') 
dates[is.na(dates)] <- as.POSIXct(MC[is.na(dates),], tz='MST', format = '%m/%d/%Y') 
MC$Date <- dates 
4

lubridate 패키지는 이와 같은 상황을 처리하도록 설계되었습니다. 다양한 형식이 누락 될 수있는 방법

dt <- c(
"12/1/15 22:00", 
"12/1/15 23:00", 
"12/2/15", 
"12/2/15 1:00", 
"12/2/15 2:00" 
) 
dt 
[1] "12/1/15 22:00" "12/1/15 23:00" "12/2/15"  "12/2/15 1:00" "12/2/15 2:00" 
lubridate::mdy_hm(dt, truncated = 2) 
[1] "2015-12-01 22:00:00 UTC" "2015-12-01 23:00:00 UTC" "2015-12-02 00:00:00 UTC" 
[4] "2015-12-02 01:00:00 UTC" "2015-12-02 02:00:00 UTC" 

truncated 매개 변수를 나타냅니다.

UTC이 적합하지 않은 경우 tz 매개 변수를 추가하여 날짜를 구문 분석 할 표준 시간대를 지정할 수 있습니다.

0

모든 datetimes는 날짜와 시간 사이에 공백으로 구분되므로 strsplit을 사용하여 날짜 부분 만 추출 할 수 있습니다.

extractDate <- function(x){ strsplit(x, split = " ")[[1]][1] } 
MC$Date <- sapply(MC$Date, extractDate) 

그런 다음 시간대가 걱정되는 일없이 원하는대로 변환하십시오.

관련 문제