2013-04-15 16 views
2

我想按小時計算彙總數據。每天很容易:爲什麼在R與xts/zoo沒有適用?

apply.daily(X2,mean) 

爲什麼每小時都沒有功能? 我試圖

hr.means <- aggregate(X2, format(X2["timestamp"],"%Y-%m-%d %H")) 

,並與裝飾的說法得到了總是錯誤。 是否有更簡單的函數類似於apply.daily?如果我想彙總5分鐘的平均值,該怎麼辦? 數據值是每分鐘:

"timestamp", value 
"2012-04-09 05:03:00",2 
"2012-04-09 05:04:00",4 
"2012-04-09 05:05:00",5 
"2012-04-09 05:06:00",0 
"2012-04-09 05:07:00",0 
"2012-04-09 05:08:00",3 
"2012-04-09 05:09:00",0 
"2012-04-09 05:10:00",1 

我使用XTS和動物園。

+0

在我看來,它可能是有用的補充例如申請並適用於包裝! –

回答

10

嘗試

period.apply(X2, endpoints(X2, "hours"), mean) 

apply.daily簡直就是上面的包裝:

> apply.daily 
function (x, FUN, ...) 
{ 
    ep <- endpoints(x, "days") 
    period.apply(x, ep, FUN, ...) 
} 
+0

到目前爲止,感謝您對5分鐘週期的任何建議? –

+1

使用'endpoints(X2,「minutes」,5)' – eddi

+0

好,我可以手動設置起點 - 例如05:00,05:05,... –

2
hr.means <- aggregate(X2, format(time(X2),"%y-%m-%d %H"), mean) 

這應該很好地工作。

0

接聽第2部分:

如果我想要聚合的5分鐘是什麼意思?

正如@eddit上述評論已經提到:

df <- read.table(header=TRUE, sep=",", stringsAsFactors=FALSE, text=" 
timestamp, value 
2012-04-09 05:03:00,2 
2012-04-09 05:04:00,4 
2012-04-09 05:05:00,5 
2012-04-09 05:06:00,0 
2012-04-09 05:07:00,0 
2012-04-09 05:08:00,3 
2012-04-09 05:09:00,0 
2012-04-09 05:10:00,1") 
X2 <- xts(df$value, as.POSIXct(df$timestamp)) 

X2.5min <- period.apply(X2, endpoints(X2, "minutes", 5), mean) 

我得到:五點04分00秒 - 4; 05:09:00 - 5,...但也許有可能將第一個值設置爲05:00:00並繼續05:05:00可能會更容易,如果我以後合併文件具有相同開始和時間步。

事實上:

> X2.5min 
        [,1] 
2012-04-09 05:04:00 3.0 
2012-04-09 05:09:00 1.6 
2012-04-09 05:10:00 1.0 

達倫·庫克over at Cross Validated面臨着同樣的問題,寫功能align.time.down

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

,可以用來調整時間下來:

X2.5mindown <- align.time.down(X2.5min, 5 * 60) 
X2.5mindown 
        [,1] 
2012-04-09 05:00:00 3.0 
2012-04-09 05:05:00 1.6 
2012-04-09 05:10:00 1.0 
+0

正如我向達倫評論的那樣,將觀測值與它們出現之前的時間*對齊似乎是一個糟糕的主意,特別是如果您要將聚合的輸出與另一個時間序列合併在一起。 –

相關問題