3

diff() の反対の関数を取得しようとしています。マトリックス内の各列に対して、マトリックス内の隣接する列の値を追加したいと考えています。列または行全体の合計は必要ありません。例えば:

もしわたしが持っていたら:

[ 1  2  4;
  3  5  8 ]

私は次のようになります:

[ 3  6;
  8  13 ]

もちろん、1 つまたは 2 つの列の場合、x[,1]+x[,2] を実行するだけなので簡単ですが、これらの行列は非常に大きくなります。

これを行う効率的な方法を見つけることができないように見えることに驚いています。

4

3 に答える 3

4
m <- matrix(c(1,3,2,5,4,8), nrow=2)
m[,-1] + m[,-ncol(m)]

     [,1] [,2]
[1,]    3    6
[2,]    8   13

または、ただの楽しみのために:

n <- ncol(m)
x <- suppressWarnings(matrix(c(1, 1, rep(0, n-1)), 
                             nrow = n, ncol = n-1))
m %*% x

     [,1] [,2]
[1,]    3    6
[2,]    8   13
于 2012-05-22T06:49:43.710 に答える
2

ダミーデータ

mat <- matrix(sample(0:9, 100, replace = TRUE), nrow = 10)

解決:

sum.mat <- lapply(1:(ncol(mat)-1), function(i) mat[,i] + mat[,i+1])
sum.mat <- matrix(unlist(sum.mat), byrow = FALSE, nrow = nrow(mat))
于 2012-05-22T06:50:05.720 に答える
0

あなたが使用することができます:

m <- matrix(c(1,2,4,3,5,8), nrow=2, byrow=T)
sapply(2:ncol(m), function(x) m[,x] + m[,(x-1)])
于 2012-05-22T06:56:05.830 に答える