2010-07-06 3 views
2

POSIXct 객체 목록에 format 이외의 다른 함수를 적용하려면 어떻게해야합니까? 예를 들어, 시간의 벡터를 가져 와서 그 시간을 잘라내어 각 시간에 임의의 함수를 적용한다고 가정 해 봅시다.POSIXct 및 sapply의 벡터

> obs.times=as.POSIXct(c('2010-01-02 12:37:45','2010-01-02 08:45:45','2010-01-09 14:45:53')) 
> obs.truncated=trunc(obs.times, units="hours") 
> obs.truncated 
[1] "2010-01-02 12:00:00 EST" "2010-01-02 08:00:00 EST" 
[3] "2010-01-09 14:00:00 EST" 

지금, 나는 obs.truncated의 길이가 3 만

> length(obs.truncated) 
[1] 9 

그래서이 벡터에 apply에 함수를 시도하는 것은 작동하지 않을 것을 볼 수있을 것으로 예상한다. obs.truncated의 클래스는

> class(obs.truncated) 
[1] "POSIXt" "POSIXlt" 

어떤 아이디어가 있습니까? applylength은 벡터의 첫 번째 요소를 자체 목록으로 취하는 것처럼 보입니다.

+0

이 몰라 : 나는 당신의 명령을 실행하고있어' 길이 (obs.truncated)'== 3 ... 그러나 다음과 같이 9 개를 얻습니다 :'length (unclass (obs.truncated))'. – Shane

+0

다음을 사용 중입니다 : R 버전 2.10.1 (2009-12-14) x86_64-pc-linux-gnu – AnthonyF

+1

짧은 이야기 : R 2.11로 업그레이드하거나 trunc 이외의 것을 사용하십시오. – Shane

답변

1

이러한 POSIXlt의 length()은 9로보고되었지만 최근에 수정되었습니다.

도 내가 trunc(obs.times) 일을 할 때 잘못된 일이 발생합니다. trunc()은 세 요소의 문자열에서 한 번만 작동합니다. 너 필요해. apply() 외. 그래서 여기

구성 요소 - 현명한 재설정과 sapply()을 사용하는 예제입니다

> sapply(obs.times, function(.) { 
+ p <- as.POSIXlt(.); 
+ p$min <- p$sec <- 0; 
+ format(p) }) 
[1] "2010-01-02 12:00:00" "2010-01-02 08:00:00" "2010-01-09 14:00:00" 
> 

반면
> trunc(obs.times, units="hours") 
[1] "2010-01-02 12:00:00 CST" "2010-01-02 08:00:00 CST" 
[3] "2010-01-09 14:00:00 CST" 
> class(trunc(obs.times, units="hours")) 
[1] "POSIXt" "POSIXlt" 
> length(trunc(obs.times, units="hours")) 
[1] 1 
> 
이 당신에게 무슨 일이 일어나고 왜
+1

OP에는 질문에'class' 명령이 포함되어 있습니다. 또한'trunc'을 호출하면 전체 벡터에 적용됩니다. 하지만 당신 말이 맞아요 : 나는 R 2.10.0을 사용하여 9 카운트를 복제 할 수 있지만 그것은 내 R 2.11.1 콘솔에서 수정되었습니다. – Shane

+0

오, 고마워. 나는 그 부분을 제거했다. –

+0

위대한,하지만 난 아직도 두 번째 단락으로 혼란스러워. 'base :: trunc (obs.times, units = "hours")'>>'[1] 2010-01-02 12:00:00 EST ""2010-01-02 08 : 00:00 EST ""2010-01-09 14:00:00 EST "(OP 예와 동일). 또한'$ sec'와'$ min' 슬롯을 살펴 보았는데, 모두 0입니다. – Shane