POSIXct에서 시간 추출


82

날짜 부분을 버리는 일련의 POSIXct 객체에서 시간을 어떻게 추출합니까?

예를 들어 다음과 같습니다.

times <- structure(c(1331086009.50098, 1331091427.42461, 1331252565.99979, 
1331252675.81601, 1331262597.72474, 1331262641.11786, 1331269557.4059, 
1331278779.26727, 1331448476.96126, 1331452596.13806), class = c("POSIXct", 
"POSIXt"))

다음 날짜에 해당합니다.

"2012-03-07 03:06:49 CET" "2012-03-07 04:37:07 CET" 
"2012-03-09 01:22:45 CET" "2012-03-09 01:24:35 CET" 
"2012-03-09 04:09:57 CET" "2012-03-09 04:10:41 CET"
"2012-03-09 06:05:57 CET" "2012-03-09 08:39:39 CET"
"2012-03-11 07:47:56 CET" "2012-03-11 08:56:36 CET"

이제 그 때 측정 된 매개 변수 값이 있습니다.

val <- c(1.25343125e-05, 0.00022890575, 
         3.9269125e-05, 0.0002285681875, 
         4.26353125e-05, 5.982625e-05, 
         2.09575e-05, 0.0001516951251, 
         2.653125e-05, 0.0001021391875)

val이 측정 된 특정 날짜에 관계없이 val 대 하루의 시간을 플롯하고 싶습니다.

그렇게 할 수있는 특정 기능이 있습니까?

답변:


115

를 사용 strftime하여 날짜 시간을 모든 문자 형식으로 변환 할 수 있습니다 .

> t <- strftime(times, format="%H:%M:%S")
> t
 [1] "02:06:49" "03:37:07" "00:22:45" "00:24:35" "03:09:57" "03:10:41"
 [7] "05:05:57" "07:39:39" "06:47:56" "07:56:36"

그러나 데이터를 플로팅하고 싶기 때문에 그다지 도움이되지 않습니다. 한 가지 해결 방법은 시간에서 날짜 요소를 제거한 다음 모든 시간에 동일한 날짜를 추가하는 것입니다.

> xx <- as.POSIXct(t, format="%H:%M:%S")
> xx
 [1] "2012-03-23 02:06:49 GMT" "2012-03-23 03:37:07 GMT"
 [3] "2012-03-23 00:22:45 GMT" "2012-03-23 00:24:35 GMT"
 [5] "2012-03-23 03:09:57 GMT" "2012-03-23 03:10:41 GMT"
 [7] "2012-03-23 05:05:57 GMT" "2012-03-23 07:39:39 GMT"
 [9] "2012-03-23 06:47:56 GMT" "2012-03-23 07:56:36 GMT"

이제 datetime플롯에서 다음 객체를 사용할 수 있습니다 .

plot(xx, rnorm(length(xx)), xlab="Time", ylab="Random value")

여기에 이미지 설명 입력


자세한 내용은 다음을 참조하십시오. ?DateTimeClasses


15

트릭을 보여주는 이전 답변이 있습니다. 본질적으로:

  • POSIXct기존의 모든 플로팅 기능을 활용 하려면 유형을 유지해야합니다.

  • 단일 플롯에 며칠 가치를 '오버레이'하고 일일 변동을 강조 표시하려는 경우 가장 좋은 방법은 역시 ...

  • 같은 날 (필요한 경우 월 및 연도를 부과합니다. 여기에서는 해당되지 않음)

POSIXlt표현할 때 일 및 월 구성 요소를 재정의 하거나 다른 날짜 사이의 0:00:00에 상대적인 '델타'를 오프셋하여 수행 할 수 있습니다 .

너무 timesval같은 유용하게 당신에 의해 제공 :

## impose month and day based on first obs
ntimes <- as.POSIXlt(times)    # convert to 'POSIX list type'
ntimes$mday <- ntimes[1]$mday  # and $mon if it differs too
ntimes <- as.POSIXct(ntimes)   # convert back

par(mfrow=c(2,1))
plot(times,val)   # old times
plot(ntimes,val)  # new times

원래 및 수정 된 시간 척도와 대조되는 다음을 생성합니다.

여기에 이미지 설명 입력


9

data.table패키지는 기능 '가 as.ITime이 효율적으로 아래에 사용 할 수있는':

library(data.table)
x <- "2012-03-07 03:06:49 CET"
as.IDate(x) # Output is "2012-03-07"
as.ITime(x) # Output is "03:06:49"

4

시계 시간을 정확히 다루는 것을 찾을 수 없으므로 package : lubridate의 일부 기능을 사용하고 자정 이후 초로 작업합니다.

require(lubridate)
clockS = function(t){hour(t)*3600+minute(t)*60+second(t)}
plot(clockS(times),val)

그런 다음 축 코드를 살펴보고 축 레이블을 멋지게 지정하는 방법을 알아볼 수 있습니다.


좋아, 내가 봐야 할 lubridate것입니다. 흥미로운 패키지처럼 보입니다.
니코

4

많은 솔루션이 제공되었지만 패키지 chron을 사용하는이 솔루션을 보지 못했습니다.

hours = times(strftime(times, format="%T"))
plot(val~hours)

(죄송합니다. 이미지를 게시 할 자격이 없습니다. 직접 플로팅해야합니다.)


3

time_t자정 GMT 의 값은 항상 86400( 24 * 3600) 로 나눌 수 있습니다. 따라서 자정 이후 초 GMT 값은 time %% 86400입니다.

GMT의 시간은 다음 (time %% 86400) / 3600과 같이 플롯의 x 축으로 사용할 수 있습니다.

plot((as.numeric(times) %% 86400)/3600, val)

여기에 이미지 설명 입력

시간대를 조정하려면 시간대가 GMT보다 앞선 시간 (초)을 추가하여 모듈러스를 취하기 전에 시간을 조정하십시오. 예를 들어 미국 중부 일광 절약 시간 (CDT)은 GMT보다 5 시간 늦습니다. CDT의 시간에 대해 플롯하려면 다음 표현식이 사용됩니다.

plot(((as.numeric(times) - 5*3600) %% 86400)/3600, val)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.