我有一个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))
R版本:2.13;平台:x86_64-pc-linux-gnu(64位)
答案 0 :(得分:17)
colSums(matrix(test.data$observation, nrow=4))
答案 1 :(得分:7)
我会做出一系列疯狂的假设,因为你的问题很模糊。
我假设您的数据是一个每7.5分钟观察一次的矩阵,并且没有空间索引。因此,100行可能如下所示:
data <- matrix(rnorm(400), ncol=4)
并且您想要总计4行的块。
有很多方法可以做到这一点,但第一个跳到我脑海中的是创建索引,然后执行“group by”和sum的R版本。
示例索引可能是这样的:
index <- rep(1:25, 4)
index <- index[order(index)]
现在我们有一个与数据长度相同的索引,您可以使用aggregate()
来总结:
aggregate(x=data, by = list(index), FUN=sum)
编辑:
上述方法的精神仍然有效。但是,如果您对时间序列数据做了很多工作,您应该了解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)
答案 2 :(得分:2)
sapply(split(test.data$observation, rep(1:(192/4), each=4)), sum)