2012-05-22 4 views
3

diff()의 반대 인 함수를 얻으려고합니다. 행렬의 각 열에 대해 행렬에 인접한 열의 값을 추가하고 싶습니다. 전체 열이나 행의 합계가 필요하지 않습니다. 예를 들어 :매트릭스의 각 열에 인접한 열 합계 R

내가 한 경우 :이 난 그냥 X를 [할 수있는 간단 하나 또는 두 개의 열이 코스의

[ 3 6; 
    8 13 ] 

:

[ 1 2 4; 
    3 5 8 ] 

내가 끝낼 것 , 1] + x [, 2], 그러나이 행렬은 꽤 큽니다.

저는이 작업을 효율적으로 수행 할 수 없다는 사실에 놀랐습니다.

답변

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 
+0

아름다움! 많이 고마워. – wrf

+0

아주 좋은, 조금 큰 매트릭스에서 그것을 시도하고 잘 작동합니다,'m <- matrix (rpois (110, 3), nrow = 11)'+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)) 
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)])