說我有以下矩陣:計算爲r的日平均
x1 = 1:288
x2 = matrix(x1,nrow=96,ncol=3)
有一種簡單的方式來獲得行的1平均:24,25:48,49:72,73:96第2列?
基本上我有一個一年的時間系列,我必須每24小時平均一些數據。
說我有以下矩陣:計算爲r的日平均
x1 = 1:288
x2 = matrix(x1,nrow=96,ncol=3)
有一種簡單的方式來獲得行的1平均:24,25:48,49:72,73:96第2列?
基本上我有一個一年的時間系列,我必須每24小時平均一些數據。
有。
假設我們有天:
Days <- rep(1:4,each=24)
你可以做很容易
tapply(x2[,2],Days,mean)
如果你有一個數據幀帶有日期的變量,你可以使用一個。您可以一次做到這一點對所有的變量,使用聚合:
x2 <- as.data.frame(cbind(x2,Days))
aggregate(x2[,1:3],by=list(Days),mean)
看看這些功能開始與幫助文件。此外在這裏做一個搜索,則對這個問題頗其他一些有趣的答案:
PS:如果你打算做了很多的時間序列,你應該請看zoo包(在CRAN上:http://cran.r-project.org/web/packages/zoo/index.html)
相當緊湊和快速的計算方法是將矢量重塑爲合適的矩陣並計算列me答。
colMeans(matrix(x2[,2],nrow=24))
乾淨的解決方案,只要沒有任何地方丟失數據。否則矩陣不會代表日子。 – 2011-01-14 12:14:00
1)ts。由於這是一個規則間隔的時間序列,將其轉換爲ts
系列,然後從頻率24彙總,以頻率1:
> aggregate(ts(x2[, 2], freq = 24), 1, mean)
,並提供:
Time Series:
Start = 1
End = 4
Frequency = 1
[1] 108.5 132.5 156.5 180.5
2)動物園。它在這裏使用動物園。動物園包也可以處理不規則間隔的系列(如果我們需要延長這一點)。下面day.hour
是天數(1,2,3,4)加上小時作爲一天的一小部分,使得floor(day.hour)
只是天數:
> library(zoo) > day.hour <- seq(1, length = length(x2[, 2]), by = 1/24) > z <- zoo(x2[, 2], day.hour) > aggregate(z, floor, mean) 1 2 3 4 108.5 132.5 156.5 180.5
如果zz
是輸出然後coredata(zz)
和time(zz)
分別是作爲普通向量的值和時間。
@SnowFrog你錯了。 tapply不會創建數據框。它創建一個向量(在這種情況下)。巨大差距。 – 2013-11-13 11:58:55
'tapply`方法的一個問題是它會創建一個向量(列數=天數)。'aggregate'方法創建一個數據框(1行,行數=天數),如果需要後續的數據處理,這可能更實用。 – SnowFrog 2013-11-20 11:07:24