R'de bir XTS zaman serisini nasıl yeniden örnekleyebilirim?


9

Düzensiz aralıklı bir XTSzaman serisi ( POSIXctdeğerleri dizin türü olarak) var.

Diyelim ki 10 dakikalık aralıklarla örneklenmiş yeni bir zaman serisini nasıl oluşturabilirim, ancak her örnek anı bir yuvarlak zamana hizalanmış olarak (13:00:00, 13:10:00, 13:20:00, ...) . Yeniden örnekleme anı tam olarak orijinal seri değerine düşmezse, bir öncekini almak istiyorum.


Bir örnek verebilir misiniz?
— Joshua Ulrich

2
Eğer xts için bir SSS listesi olsaydı, bu yüksek bir skor olurdu. Lütfen buraya bakın [r] xts, r-sig-finans arşivlerini arayın ve inceleyin.
— Dirk Eddelbuettel

Yanıtlar:


5
library(xts)
?endpoints

Örneğin

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

her 20 dakikada bir alt örnekleme yapın. Ayrıca kontrol etmek isteyebilirsiniz to.minutes, to.dailyvb


Sadece küçük bir sorun var - eğer ben ..., 14:59, 15:00, ..., 14:59 alır ve istediğim gibi 15:00 alır. Saat 15: 00'e geri dönmenin bir yolu var mı? Gibi bir şey denedim "seconds", 3601, ama işe yaramıyor
— Meh

Zaman damgaları düzensiz olduğu için sadece veri noktaları arasındaki dt üzerinde garanti verilebilir. Gerçek noktalar serinin başlangıç ​​noktasına bağlıdır. Başlangıç ​​noktanızı yuvarlak bir saate sabitlerseniz, istediğiniz gibi davranacaktır ... (her N dakikada bir puanınız olduğu varsayılarak)
— Dr G

Bu tam olarak istemediğim şey - ilk noktaya bağımlı olmak
— Meh

2

Ne yapmaya çalıştığınızdan hala emin değilim ve hala bir örnek yardımcı olacağını düşünüyorum, ancak ilginizi çekebileceğini tahmin ediyorum align.time.

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

Herhangi bir zaman serisini düşünün - dış sıcaklık. Ben 11:00 duvar saati, 12:00 duvar saati, sıcaklık nedir bilmek istiyorum .... Bunu olup olmadığını görmek için daha sonra örnek kontrol edeceğim
— Meh

Anlayabildiğim kadarıyla, uç noktaları kullandıktan sonra, align.time uygulaması Adal'ın istediği şeydir (orijinal soruda "bir öncekini" alma sözü dışında). Her neyse, istediğim buydu, çok teşekkürler Joshua.
— Rahul Savani

Align.time sürümü var, ancak yukarı değil, yuvarlamak için? Aynı zamanda tam olarak istediğimi yapıyor ama bunun için. (BTW, kaba bir yolum var: eğer a1 benim XTS nesnesiyse ve dakika aralıklarına yuvarlamak istiyorsanız index(a1)=index(a1)-60;align.time(a1,60))
— Darren Cook

1
@DarrenCook: Bunu yapan bir sürümü align.timeyok. Ne olursa olsun, gözlemleri gerçekleşmeden önceki bir zamanla hizalamak kötü bir fikir gibi görünüyor .
— Joshua Ulrich

2
@JoshuaUlrich Bir örnek finansal keneleri bir bara dönüştürmektir. 08:00, 08:00:00 - 08:00:59 arasındaki dakikayı temsil eder. Saat 08:00 olarak 08:00:00 ile 08:59:59 arasındadır. (O zaman günlük çubukların nasıl çalıştığı ile tutarlı, 2011-11-25 2011-11-24'te değil 2011-11-25'te ticareti temsil ediyor.) Bence bu OP'nin istediği aynı davranıştı.
— Darren Cook

1

Eğer aikinci çözünürlüğe girişleriyle bir XTS nesne, tüm saniye kapalı bu darbelere geçerli: endeksi (a) = trunc (indeks, (a), "dakika")

Bunu, "saat" çözünürlüğüne azaltmak için de kullanabilirsiniz. Ancak 10 dakika desteklenmez. Bunun için bunu yapmalısınız:

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

Veya a=align.time.down(a,600)tanımladığınız yer:

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

(kendi senaryomda bu son seçeneğe gittim.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.