2010-05-27 23 views
7

假設在R中,我有一個data.frame,第一列代表時間(如POSIXct)。其餘列(例如,第2列)是數字數據。如何快速將數據幀中的時間列分組爲間隔?

我想將時間分成3分鐘的時間間隔。每個區間將是落入該特定區間的值的平均值。

現在,我有一個循環遍歷時間列並生成間隔。我想知道是否有更完美的方式來完成同樣的事情?

在此先感謝。

德里克

+0

類似問題http://stackoverflow.com/questions/2441136/what-is-an-efficient-方法分區和聚合間隔時間 – Marek 2010-05-29 19:36:37

回答

9

我認爲,類似下面的命令,將返回落在分爲3個分鐘間隔的值的列表。 (v是數據框的名字和datecol是日期列名)

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類型?我嘗試這個時遇到了錯誤。 – 2010-05-27 21:28:43

+0

@Dirk Eddelbuettel:我編輯了包含我正在測試的數據框 – 2010-05-28 05:34:25

6

動物園和XTS包擅長這一點,並有豐富的文檔。這裏是一個罐裝預to.minutes3,但我也用aggregate.zoo()自定義功能做手工相同:

> 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 
> 
相關問題