对R中矩阵中每列的相邻列求和

时间:2012-05-22 06:40:06

标签: r matrix diff

我正在尝试获得与diff()相反的函数 我想在矩阵中为每列添加相邻列的值。 我不需要整个列或行的总和。 例如:

如果我有:

[ 1  2  4;
  3  5  8 ]

我最终会:

[ 3  6;
  8  13 ]

当然只有一两列这很简单,因为我可以做x [,1] + x [,2],但这些矩阵非常大。

我很惊讶我似乎无法找到一种有效的方法来做到这一点。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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))

答案 2 :(得分: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)])
相关问题