2012-02-26 1 views
1

나는 불규칙한 시계열을 가지고 있으며 xtsendpoints을 사용하여 시간 시리즈의 시간별 색인을 얻습니다. 같은 패션xts의 시간별 종점과 일광 절약 시간제

period.apply(data, INDEX=endpoints(data, on="hours"), FUN=mean) 

문제에 시간당 계산하기 위해

endpoints(data, on="hours") 

내가 이것을 사용하고, 그러나, (같은 시간 때문에) 두 개의 연속 된 인덱스를 반환 endpoints하는 기능입니다. 우리가 날짜 시간을 살펴 경우

> endpoints(data, on="hours")[7201:7220] 
[1] 87077 87078 87089 87101 87113 87125 87137 87149 87162 87175 87187 87199 87211 87223 87235 87247 87259 87271 87283 87295 

그들이 대표 :

data[endpoints(data, on="hours")[7201:7220]] 

우리가 이러한 2007년 10월 28일 02은 그 시간

> data[endpoints(data, on="hours")[7201:7220]] 
       jstimestamp X61757 X61754 X61760 X61753 X61758 X61762 X61756 X61759 X61761 X61755 X61752 
2007-10-28 01:55:00 1.193529e+12 938.7 1339.6 450.8 799.4 850.0 1653.6 622.3 159.6 4415.4 681.6 1421.0 
2007-10-28 02:00:00 1.193530e+12 946.0 1326.3 437.8 799.9 829.3 1644.1 629.0 182.8 4413.7 688.5 1397.2 
2007-10-28 02:55:00 1.193533e+12 916.4 1337.0 432.3 778.0 838.6 1581.5 616.8 166.0 4282.8 670.9 1361.8 
2007-10-28 03:55:00 1.193540e+12 909.1 1273.8 446.9 765.4 836.2 1559.7 599.5 163.8 4191.2 667.9 1373.3 
2007-10-28 04:55:00 1.193544e+12 930.8 1320.3 426.4 758.3 834.8 1567.5 594.0 152.7 4130.2 688.4 1377.3 
2007-10-28 05:55:00 1.193547e+12 943.5 1355.1 447.7 784.6 856.9 1592.4 629.0 163.8 4150.3 686.2 1391.5 
2007-10-28 06:55:00 1.193551e+12 1018.3 1443.2 463.7 841.0 877.1 1677.3 670.8 161.8 4310.8 708.9 1441.3 
2007-10-28 07:55:00 1.193554e+12 1052.2 1525.7 472.5 887.7 903.6 1734.9 716.1 199.5 4390.9 722.7 1504.3 
2007-10-28 08:52:34 1.193558e+12 1167.1 1570.3 519.2 933.0 957.5 1919.9 795.0 225.5 4706.4 733.0 1561.1 
2007-10-28 09:55:00 1.193562e+12 1224.1 1653.4 547.2 992.1 1039.9 2053.5 797.2 217.9 4952.1 739.4 1610.6 
2007-10-28 10:55:00 1.193565e+12 1233.4 1745.9 569.8 1038.1 1060.8 2145.3 778.0 231.6 5182.4 759.1 1621.5 
2007-10-28 11:55:00 1.193569e+12 1217.8 1751.6 581.3 1056.6 1084.2 2177.6 791.0 246.6 5296.4 758.6 1642.0 
2007-10-28 12:55:00 1.193572e+12 1212.5 1786.3 589.2 1034.4 1069.2 2191.2 784.4 242.2 5357.5 728.5 1670.8 
2007-10-28 13:55:00 1.193576e+12 1200.1 1694.8 586.1 1059.3 1063.2 2174.2 773.3 248.6 5336.7 747.8 1650.6 
2007-10-28 14:55:00 1.193580e+12 1188.1 1736.7 577.7 1049.9 1041.1 2168.4 771.5 233.6 5332.9 746.9 1651.5 
2007-10-28 15:55:00 1.193583e+12 1187.9 1696.8 574.1 1056.9 1060.4 2152.6 790.4 255.8 5326.9 740.6 1653.0 
2007-10-28 16:55:00 1.193587e+12 1250.3 1793.2 580.8 1048.1 1116.8 2232.6 810.2 257.1 5360.4 765.6 1688.4 
2007-10-28 17:55:00 1.193590e+12 1325.9 1796.0 614.7 1148.7 1134.2 2368.6 816.9 301.6 5530.3 772.7 1673.1 
2007-10-28 18:55:00 1.193594e+12 1433.2 1966.3 697.8 1183.6 1276.2 2615.3 928.2 324.1 5805.4 762.7 1853.9 
2007-10-28 19:55:00 1.193598e+12 1436.2 1906.2 678.5 1196.9 1217.9 2575.4 882.2 337.1 5809.5 789.7 1852.5 

문제되고있는 것을 알 수 을 두 번으로 표시했습니다. 시간당 엔드 포인트에 대한 나의 이해는 이것이 일어나서는 안된다는 것입니다. 내가 여기서 뭔가 잘못하고있는거야?

편집 :이 아래 더크 Eddelbuettel의 대답에 따라 효과에 참으로 일광 절약했다. 이 문제를 해결하려면, 내가하는 데 필요한 : UTC 데이터를 파싱 (내 컴퓨터의했다 적용된 기본 시간대 -> CET) 어떤 시간대에

  1. 변환
  2. 시간당 계산 후 수단으로 :

    data.hourly = period.apply (데이터, INDEX = 엔드 포인트 (데이터 = "시간"), FUN = 평균에)

내가 수동으로 다시 (data.hourly뿐만 아니라 시간대의 오버라이드 (override) 할 필요, 기본 컴퓨터의 표준 시간대 사용) :

indexTZ(data.hourly) <- "UTC" 

답변

5

이것은 직감이지만 TZ와 표준 시간에서 일광 절약 시간으로의 또 다른 표현 일 수 있습니다. UTC로 변환하여 무슨 일이 일어나는지보십시오.

또는 한 주 (또는 한 달 또는 ...)까지 데이터를 이동하고 같은 문제가 발생하는지 확인하십시오.

그리고 그게 문제입니다. 'fall back'밤은 실제로 오전 2시에 시작하는 2 시간이므로 실제로 이것은 버그가 아닙니다.

편집 : 그리고 당신은 당신의 시간대가 있었고, 그것은 내 (미국 중앙)에서 작동하지 않는 동안, 우리가 유럽 대륙에 대한 문제를 나타낼 수 무슨 말을하지 않았지만 :

R> ISOdate(2007, 10, 28, 0, 30, 0, tz="Europe/Berlin") + seq(0,4)*60*60 
[1] "2007-10-28 00:30:00 CEST" "2007-10-28 01:30:00 CEST" 
[3] "2007-10-28 02:30:00 CEST" "2007-10-28 02:30:00 CET" 
[5] "2007-10-28 03:30:00 CET" 
R> 

  1. 속성이 CEST에서 전환하는 TZ는 CET하는 방법을 참조하십시오

  2. 두 개의 시간대 각각에 대해 실제로 두 개의 02:30:00 시간이 있습니다.

그래서 xts에서 어떤 버그가 있지만 데이터의 기능.

+0

정확합니다. 정말로 CET (내 기본 TZ)의 일광 절약 시간 문제입니다. UTC로 파싱 할 때 데이터의 표준 시간대를 변경했습니다. 이제 종단점 함수는 반환 할 것으로 예상되는 것을 반환합니다 (일광 절약으로 인해 중복되지 않음). 그러나 period.apply (데이터, INDEX = endpoints (data, = "hours"), FUN = mean)를 호출하면 다시 CET로 변환되어 다시 2007-10-28 시간 2 평균값을 얻습니다. 내가 period.apply에 사용할 표준 시간대를 전달하는 방법은 무엇입니까? –

+0

수동으로 period.apply 객체 (data.hourly)의 시간대를 indexTZ (data.hourly) <- "UTC"로 설정 한 후보고 된 방법이 의도 한대로 작동하는 것 같습니다. –

+0

좋아요! 질문을 편집하고 그 (해결 된) 해결책을 보여줄 수 있습니까? TZ 작업은 까다 롭고 작업 한 예제로 '인터 튜브 (intertubes) 채우기'가 가장 좋습니다. –