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.