说我有以下矩阵:
x1 = 1:288
x2 = matrix(x1,nrow=96,ncol=3)
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以获得第2列的行1:24,25:48,49:72,73:96的平均值?
基本上我有一年的时间序列,我必须每24小时平均一些数据.
有.
假设我们有这些日子:
Days <- rep(1:4,each=24)
Run Code Online (Sandbox Code Playgroud)
你可以轻松做到
tapply(x2[,2],Days,mean)
Run Code Online (Sandbox Code Playgroud)
如果您有一个带有Date变量的数据框,则可以使用该变量.您可以使用aggregate立即对所有变量执行此操作:
x2 <- as.data.frame(cbind(x2,Days))
aggregate(x2[,1:3],by=list(Days),mean)
Run Code Online (Sandbox Code Playgroud)
首先看一下这些函数的帮助文件.另外在这里搜索一下,关于这个问题还有其他一些有趣的答案:
PS:如果你打算做很多时间序,你应该看一下动物园包(在CRAN上:http://cran.r-project.org/web/packages/zoo/index.html)
1)ts.由于这是一个规则间隔的时间序列,将其转换为ts一系列,然后将其从频率24聚合到频率1:
aggregate(ts(x2[, 2], freq = 24), 1, mean)
Run Code Online (Sandbox Code Playgroud)
赠送:
Time Series:
Start = 1
End = 4
Frequency = 1
[1] 108.5 132.5 156.5 180.5
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果zz从输出aggregate然后coredata(zz)和time(zz)是值和时间,分别作为普通载体.
| 归档时间: |
|
| 查看次数: |
16281 次 |
| 最近记录: |