R에서 XTS 시계열을 다시 샘플링하는 방법은 무엇입니까?


9

불규칙한 간격의 XTS시계열이 있습니다 ( POSIXct인덱스 유형 으로 값 사용).

10 분 간격으로 샘플링하지만 각 샘플 모멘트가 둥근 시간 (13:00:00, 13:10:00, 13:20:00, ...)으로 샘플링 된 새 시계열을 어떻게 빌드 할 수 있습니까? . 리샘플링 모멘트가 원래 시리즈 값과 정확히 일치하지 않으면 이전 값을 사용하고 싶습니다.


예를 들어 주시겠습니까?
Joshua Ulrich

2
xts에 대한 FAQ 목록이 있다면 높은 점수를 얻습니다. 여기를 둘러보고 [r] xtsr-sig-finance 아카이브를 검색 하고 숙독하십시오.
Dirk Eddelbuettel

답변:


5
library(xts)
?endpoints

예를 들어

tmp=zoo(rnorm(1000), as.POSIXct("2010-02-1")+(1:1000)*60)
tmp[endpoints(tmp, "minutes", 20)]

20 분마다 서브 샘플링합니다. 또한 체크 아웃 할 수 있습니다 to.minutes, to.daily


작은 문제가 있습니다-..., 14:59, 15:00, ...이 있으면 원하는대로 15:00이 아닌 14:59를 검색합니다. 15:00을 반환하는 방법이 있습니까? 나는 같은 것을 시도했지만 "seconds", 3601작동하지 않습니다
Meh

타임 스탬프가 불규칙하므로 데이터 포인트 사이의 dt 만 보장 할 수 있습니다. 실제 포인트는 시리즈의 시작점에 따라 다릅니다. 시작 시간을 라운드 시간으로 고정하면 원하는대로 작동합니다. (N 분마다 포인트가 있다고 가정)
Dr G

이것이 바로 내가 원하지 않는 것입니다 – 첫 번째 포인트에 의존하는 것
Meh

2

나는 아직도 당신이하려는 일을 확신하지 못하고 예제가 도움이 될 것이라고 생각하지만, 나는 당신이 관심이 있다고 생각할 것입니다 align.time.

# Compare this:
tmp[endpoints(tmp, "minutes", 20)]
# with this:
align.time( tmp[endpoints(tmp, "minutes", 20)], n=60*20 )

시계열-외부 온도를 고려하십시오. 나는 11:00 벽시계의 온도, 12:00 벽시계의 온도를 알고 싶습니다. ... 나중에이 예제가 작동하는지 확인합니다.
Meh

내가 알 수있는 한, 엔드 포인트를 사용한 후의 align.time 적용은 Adal이 원했던 것입니다 (원래 질문에서 "이전 항목"에 대한 언급과는 별도로). 어쨌든, 그것은 내가 원했던 것입니다. 여호수아.
Rahul Savani

align.time 버전이 있지만 반올림하지 않습니까? 또한 내가 원하는 것을 정확하게 수행합니다. (A1 내 XTS 객체 인 경우 그때 나는 분 간격으로 둥근 아래에 원하는 BTW, 나는 원유 방법이 index(a1)=index(a1)-60;align.time(a1,60))
대런 쿡

1
@ DarrenCook : 그 버전이 없습니다 align.time. 그럼에도 불구하고, 관측치가 발생 하기 전에 시간을 맞추는 것은 나쁜 생각처럼 보입니다 .
Joshua Ulrich

2
@JoshuaUlrich 한 가지 예는 금융 틱을 막대로 변환하는 것입니다. 08:00는 08:00:00에서 08:00:59까지의 분을 나타냅니다. 시간 막대로 08:00는 08:00:00 ~ 08:59:59를 나타냅니다. (2011-11-25는 2011-11-24가 아닌 2011-11-25의 거래를 나타내는 일일 바의 작동 방식과 일치합니다.) 이것이 OP가 원했던 것과 같은 행동이라고 생각합니다.
대런 쿡

1

a두 번째 해상도의 항목이있는 xts 객체 인 경우 모든 초가 종료됩니다. index (a) = trunc (index (a), "mins")

이것을 사용하여 "시간"해상도로 반올림 할 수도 있습니다. 그러나 10 분은 지원되지 않습니다. 이를 위해서는 다음을 수행해야합니다.

x=as.POSIXlt(index(a))
x$sec[]=0;x$min[]=x$min[]%/%10
index(a)=x

또는 a=align.time.down(a,600)정의한 위치 :

align.time.down=function(x,n){index(x)=index(x)-n;align.time(x,n)}

(내 자신의 스크립트에서 마지막 선택으로 갔다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.