2017-02-12 1 views
1

인덱스를 UTC로 변환하여 끝점을 생성한다고 생각합니다. 나는 매시간 9 : 00/10 : 00 등 (또는 내 정의 된 간격으로 9 : 30/10 : 30 등)마다 변경 점을 원한다.끝점은 항상 UTC/GMT로 표시됩니다.

아래의 예제 개체 'a'는 UTC이고 끝점은 개체 'b'의 10 : 25,11 : 25 등에서 4 : 55,5 : 55 등에서 만들어집니다. 시간대와 관계없이 지정된 방식으로 끝점을 제공하는 솔루션입니다.

이렇게 간단한 메커니즘이 있습니까?

> head(a) 
         Open High  Low Close 
2008-01-01 04:30:00 6114.05 6126.65 6111.35 6111.35 
2008-01-01 04:35:00 6110.50 6130.65 6110.50 6128.90 
2008-01-01 04:40:00 6128.70 6130.15 6123.15 6123.55 
2008-01-01 04:45:00 6124.85 6131.90 6123.45 6131.55 
2008-01-01 04:50:00 6132.20 6134.45 6128.70 6131.20 
2008-01-01 04:55:00 6132.25 6134.85 6132.25 6134.45 
> indexTZ(a) 
    TZ 
"UTC" 
> a[endpoints(a,on="hours")] 
         Open High  Low Close 
2008-01-01 04:55:00 6132.25 6134.85 6132.25 6134.45 
2008-01-01 05:55:00 6136.70 6136.70 6132.15 6134.45 
2008-01-01 06:55:00 6157.65 6157.65 6153.20 6154.25 
2008-01-01 07:55:00 6155.65 6157.60 6155.00 6157.25 
2008-01-01 08:55:00 6143.25 6143.90 6137.50 6138.05 
2008-01-01 09:55:00 6150.95 6151.65 6147.50 6149.20 
2008-01-02 04:55:00 6113.40 6120.90 6089.00 6089.00 
2008-01-02 05:55:00 6086.15 6087.25 6068.80 6068.95 
2008-01-02 06:55:00 6098.10 6108.25 6098.10 6105.85 
2008-01-02 07:05:00 6107.40 6107.40 6093.70 6094.80 
> head(b) 
         Open High  Low Close 
2008-01-01 10:00:00 6114.05 6126.65 6111.35 6111.35 
2008-01-01 10:05:00 6110.50 6130.65 6110.50 6128.90 
2008-01-01 10:10:00 6128.70 6130.15 6123.15 6123.55 
2008-01-01 10:15:00 6124.85 6131.90 6123.45 6131.55 
2008-01-01 10:20:00 6132.20 6134.45 6128.70 6131.20 
2008-01-01 10:25:00 6132.25 6134.85 6132.25 6134.45 
> indexTZ(b) 
      TZ 
"Asia/Kolkata" 
> b[endpoints(b,on="hours")] 
         Open High  Low Close 
2008-01-01 10:25:00 6132.25 6134.85 6132.25 6134.45 
2008-01-01 11:25:00 6136.70 6136.70 6132.15 6134.45 
2008-01-01 12:25:00 6157.65 6157.65 6153.20 6154.25 
2008-01-01 13:25:00 6155.65 6157.60 6155.00 6157.25 
2008-01-01 14:25:00 6143.25 6143.90 6137.50 6138.05 
2008-01-01 15:25:00 6150.95 6151.65 6147.50 6149.20 
2008-01-02 10:25:00 6113.40 6120.90 6089.00 6089.00 
2008-01-02 11:25:00 6086.15 6087.25 6068.80 6068.95 
2008-01-02 12:25:00 6098.10 6108.25 6098.10 6105.85 
2008-01-02 12:35:00 6107.40 6107.40 6093.70 6094.80 
> 

감사 & Regds

시바 Sunku는

답변

1

endpoints 항상 UTC에서 오프셋을 계산합니다. 최종 사용자로 변경할 수있는 방법은 없습니다. 그러나 1 시간 엔드 포인트와 30 분 엔드 포인트를 비교하여 해결할 수 있습니다.

x <- .xts(1:12, seq(0, by=600, length.out=12), tzone="Asia/Kolkata") 
x[endpoints(x, "hours")] 
#      [,1] 
# 1970-01-01 06:20:00 6 
# 1970-01-01 07:20:00 12 
hourEndpointsTZ30 <- function(x) { 
    h <- endpoints(x, "hours", 1) 
    m <- endpoints(x, "minutes", 30) 
    c(0, setdiff(m, h), last(m)) 
} 
x[hourEndpointsTZ30(x)] 
#      [,1] 
# 1970-01-01 05:50:00 3 
# 1970-01-01 06:50:00 9 
# 1970-01-01 07:20:00 12 
+0

안녕하세요 여호수아, 정말 고마워. –

관련 문제