如何得到R中矩阵的每四行的总和

Abe*_*Abe 9 r summary time-series

我有一个4n乘m矩阵(一年7.5分钟的总和).我想将这些转换为30分钟的总和,例如将70080 x 1转换为17520矩阵.

计算效率最高的方法是什么?

更多细节:这是一个例子(缩短为一天而不是一年)

library(lubridate)
start.date <- ymd_hms("2009-01-01 00:00:00")
n.seconds    <- 192 # one day in seconds
time <- start.date + c(seq(n.seconds) - 1) * seconds(450)

test.data <- data.frame(time = time, 
                        observation = sin(1:n.seconds / n.seconds * pi))
Run Code Online (Sandbox Code Playgroud)

R版本:2.13; 平台:x86_64-pc-linux-gnu(64位)

Aar*_*ica 18

colSums(matrix(test.data$observation, nrow=4))
Run Code Online (Sandbox Code Playgroud)


JD *_*ong 7

因为你的问题很模糊,我会做出一系列疯狂的假设.

我假设您的数据是一个每7.5分钟观察一次的矩阵,并且没有空间索引.所以100行可能看起来像这样:

data <- matrix(rnorm(400), ncol=4)
Run Code Online (Sandbox Code Playgroud)

并且你想要总结4行的块.

有很多方法可以做到这一点,但第一个跳到我脑中的是创建一个索引,然后做一个"group by"和sum的R版本.

示例索引可能是这样的:

index <- rep(1:25, 4)
index <- index[order(index)]
Run Code Online (Sandbox Code Playgroud)

所以现在我们有一个与数据长度相同的索引,你可以用它aggregate()来总结:

aggregate(x=data, by = list(index), FUN=sum)
Run Code Online (Sandbox Code Playgroud)

编辑:

上述方法的精神仍然有效.但是,如果您对时间序列数据做了很多工作,您应该了解xts包.这是一个xts示例:

require(xts)
test.xts <- xts(test.data$observation, order.by=test.data$time)
period.apply(test.xts, endpoints(test.xts,"minutes", 30), sum)
Run Code Online (Sandbox Code Playgroud)