我试图获得一个与 diff() 相反的函数我想为矩阵中的每一列添加矩阵中相邻列的值。我不需要整列或整行的总和。例如:
如果我有:
[ 1 2 4;
3 5 8 ]
我最终会得到:
[ 3 6;
8 13 ]
当然,对于一两列,这很简单,因为我可以只做 x[,1]+x[,2],但是这些矩阵非常大。
我很惊讶我似乎找不到有效的方法来做到这一点。
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
虚拟数据
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))
你可以使用:
m <- matrix(c(1,2,4,3,5,8), nrow=2, byrow=T)
sapply(2:ncol(m), function(x) m[,x] + m[,(x-1)])