2012-07-24 2 views
3

"날짜"(클래스의 변수 = POSIXlt) 시간을 내 데이터 집합에서 현지화하려고 할 때 오류가 발생합니다. number of items to replace is not a multiple of replacement length을 : 나는 오류 때문에POSIXlt에 추가하여 다른 시간대의 날짜 변경

# All dates are coded by survey software in EST(not local time) 
date <- c("2011-07-26 07:23", "2011-07-29 07:34", "2011-07-29 07:40") 
region <-c("USA-EST", "UK", "Singapore") 

#Change the times based on time-zone differences 
start_time<-strptime(date,"%Y-%m-%d %h:%m") 
localtime=as.POSIXlt(start_time) 
localtime<-ifelse(region=="UK",start_time+6,start_time) 
localtime<-ifelse(region=="Singapore",start_time+12,start_time) 

#Then, I need to extract the hour and weekday 
weekday<-weekdays(localtime) 
hour<-factor(localtime) 

, 내 "ifelse" 문에 문제가 있어야 다음과 같이 예제 코드입니다. 도와주세요!

+3

당신의'strptime'은'start_time <-strptime (date, "% Y- % m- % d % H : % m : % s")' – Ryogi

+0

여야합니다 - 죄송합니다. 내 데이터를 실제로 반영하도록 수정되었습니다. 나는 * strptime이 문제라고 생각하지 않는다 ... – roody

+0

당신의'date'는 그렇게 형식화되지 않았다. 'start_time'은'NA NA NA'입니다. '% m/% d/% Y % H : % M' 대신에'% Y- % m- % d % H : % M'과 같은 형식을 사용하십시오. – GSee

답변

0

당신은 POSIXct에 내장 시간대 처리 사용할 수 있습니다 어떻게 R의 기본 타임 코드를 사용하는 방법에 대한

> start_time <- as.POSIXct(date,"%Y-%m-%d %H:%M", tz = "America/New_York") 
> start_time 
[1] "2011-07-26 07:23:00 EDT" "2011-07-29 07:34:00 EDT" "2011-07-29 07:40:00 EDT" 
> format(start_time, tz="Europe/London", usetz=TRUE) 
[1] "2011-07-26 12:23:00 BST" "2011-07-29 12:34:00 BST" "2011-07-29 12:40:00 BST" 
> format(start_time, tz="Asia/Singapore", usetz=TRUE) 
[1] "2011-07-26 19:23:00 SGT" "2011-07-29 19:34:00 SGT" "2011-07-29 19:40:00 SGT" 
2

를?

region <- c("EST","Europe/London","Asia/Singapore") 
(localtime <- lapply(seq(date),function(x) as.POSIXlt(date[x],tz=region[x]))) 
[[1]] 
[1] "2011-07-26 07:23:00 EST" 

[[2]] 
[1] "2011-07-29 07:34:00 Europe/London" 

[[3]] 
[1] "2011-07-29 07:40:00 Asia/Singapore" 

그리고 하나의 시간대에 벡터로 변환 :

Reduce("c",localtime) 
[1] "2011-07-26 13:23:00 BST" "2011-07-29 07:34:00 BST" 
[3] "2011-07-29 00:40:00 BST" 
트릭은 당신이 POSIX 벡터에 둘 이상의 시간대를, 그래서 사용하는 대신에 목록을 할 수 없다는 것입니다

나의 시스템 시간대는 BST이지만, 당신이 EST라면 그것은 변환 될 것입니다.

+0

안녕하세요 - 귀하의 논리를 따르지만 실제 코드에 적용하는 데 문제가 있습니다. 오류 : as.POSIXlt.numeric (start_time [x], tz = timezone [x])의 오류 : 'origin'이 제공되어야합니다. 생각? – roody

+0

@roody 문자열 대신 숫자를 as.POSIXlt에 전달하는 것 같습니다. 문자 벡터가 아닌 요소가 있기 때문에 가능합니까? – James

관련 문제