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.