10

私は4nxmのマトリックスを持っています(1年間で7.5分間隔で合計)。これらを30分の合計に変換したいと思います。たとえば、70080x1を17520行列に変換します。

これを行うための最も計算効率の良い方法は何ですか?

詳細:例を次に示します(1年ではなく1日に短縮)

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ビット)

4

3 に答える 3

18
colSums(matrix(test.data$observation, nrow=4))
于 2011-07-29T16:56:20.503 に答える
7

あなたの質問はかなりあいまいなので、一連のクレイジーな仮定を立てます。

あなたのデータは7.5分ごとに観測されたマトリックスであり、空間インデックスはないと仮定します。したがって、100 行は次のようになります。

data <- matrix(rnorm(400), ncol=4)

4行のチャンクを合計したいとします。

これを行う方法はたくさんありますが、最初に頭に浮かんだのは、インデックスを作成してから、R バージョンの "group by" と sum を実行することです。

インデックスの例は次のようになります。

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)
于 2011-07-29T14:26:50.233 に答える
3
sapply(split(test.data$observation, rep(1:(192/4), each=4)), sum)
于 2011-07-29T20:54:35.850 に答える