2010-05-27 14 views
7

R'de varsayarsak, zamanı temsil eden ilk sütuna sahip bir data.frame'im var (POSIXct olarak). Sütunların geri kalanı (ör., Sütunlar 2) sayısal verilerdir.Bir zaman çizelgesindeki zaman sütununu aralıklarla nasıl hızlı bir şekilde gruplandırırım?

3 dakikalık aralıklarla zaman ayırmak istiyorum. Her aralık, o belirli aralığa düşen değerlerin ortalaması olacaktır.

Şu anda, zaman sütunu boyunca yineleme ve anında aralık oluşturmak için bir döngü var. Aynı şeyi başarmanın daha zarif bir yolu var mı diye merak ediyorum.

Şimdiden teşekkürler.

derek

+0

Benzer soru http://stackoverflow.com/questions/2441136/what-is-an-efficient- time-sectioning-ve-aggregating-intervals-from-times – Marek

cevap

9

Ben aşağıdaki gibi bir komut, 3 dakikalık aralıklarla düşmek değerler listesi döneceğini düşünüyorum.

library(plyr) 

v<-data.frame(datecol=as.POSIXct(c(
    "2010-01-13 03:02:38 UTC", 
    "2010-01-13 03:03:14 UTC", 
    "2010-01-13 03:05:52 UTC", 
    "2010-01-13 03:07:42 UTC", 
    "2010-01-13 03:09:38 UTC", 
    "2010-01-13 03:10:14 UTC", 
    "2010-01-13 03:12:52 UTC", 
    "2010-01-13 03:13:42 UTC", 
    "2010-01-13 03:15:42 UTC", 
    "2010-01-13 03:16:38 UTC", 
    "2010-01-13 03:18:14 UTC", 
    "2010-01-13 03:21:52 UTC", 
    "2010-01-13 03:22:42 UTC", 
    "2010-01-13 03:24:19 UTC", 
    "2010-01-13 03:25:19 UTC" 
)), x = cumsum(runif(15)*10),y=cumsum(runif(15)*20)) 


dlply(v,.(cut(datecol,"3 min")),"[") 
+0

POSIXct türlerinde cut() 'yapabileceğinizden emin misiniz? Bunu denediğimde hatalarm var. –

+0

@Dirk Eddelbuettel: Test ettiğim veri çerçevesini ekledim –

6

hayvanat bahçesi ve XTS paketleri bu sivrilmek ve bol belgelere sahip (v dataframe adıdır ve datecol tarihi sütununun adıdır). İşte bir ön konserve to.minutes3, ama aynı zamanda özel fonksiyonları elle aynını yaptılar aggregate.zoo() kullandı:

> library(xts) 
> x <- xts(cumsum(abs(rnorm(20))), Sys.time()+60*(0:19)) 
> x 
         [,1] 
2010-05-27 14:44:25 1.2870 
2010-05-27 14:45:25 3.3187 
2010-05-27 14:46:25 4.0976 
2010-05-27 14:47:25 5.3304 
2010-05-27 14:48:25 6.9415 
2010-05-27 14:49:25 7.4508 
2010-05-27 14:50:25 8.5281 
2010-05-27 14:51:25 8.7145 
2010-05-27 14:52:25 9.0120 
2010-05-27 14:53:25 10.5063 
2010-05-27 14:54:25 11.6312 
2010-05-27 14:55:25 11.9813 
2010-05-27 14:56:25 13.8883 
2010-05-27 14:57:25 14.1696 
2010-05-27 14:58:25 14.3269 
2010-05-27 14:59:25 14.6768 
2010-05-27 15:00:25 15.4926 
2010-05-27 15:01:25 16.8408 
2010-05-27 15:02:25 18.7739 
2010-05-27 15:03:25 19.7815 
> to.minutes3(x) 
        x.Open x.High x.Low x.Close 
2010-05-27 14:44:25 1.2870 1.2870 1.2870 1.2870 
2010-05-27 14:47:25 3.3187 5.3304 3.3187 5.3304 
2010-05-27 14:50:25 6.9415 8.5281 6.9415 8.5281 
2010-05-27 14:53:25 8.7145 10.5063 8.7145 10.5063 
2010-05-27 14:56:25 11.6312 13.8883 11.6312 13.8883 
2010-05-27 14:59:25 14.1696 14.6768 14.1696 14.6768 
2010-05-27 15:02:25 15.4926 18.7739 15.4926 18.7739 
2010-05-27 15:03:25 19.7815 19.7815 19.7815 19.7815 
> 
İlgili konular