2013-03-14 2 views
2

R의 데이터 조작에 관한 매우 일반적인 질문이 있으며 편리하고 빠른 방법을 모색 중입니다. 내가 (R) - by - (nxm) 차원의 행렬, 즉 R 개의 행과 n × m 개의 행을 가지고 있다고 가정합니다.행렬의 블록 수량 계산 R

set.seed(999) 
n = 5; m = 10; R = 100 
ncol = m*n 
mat = matrix(rnorm(n*m*R), nrow=R, ncol=ncol) 

지금 나는 새로운 매트릭스 (new.mat를 호출) 차원의 (R) -by- (m)를 갖고 싶어, 즉 mat의 특정 행을 주어, 나는 수 (합계 말한다)을 계산하려면 첫 번째 n 요소의 경우 다음 n 요소의 번호 등입니다. 이 방법으로 mat의 첫 번째 행은 m 개의 숫자로 끝납니다. 동일한 행이 mat 행마다 행해집니다. 위에서 주어진 예

, 새로운 new.mat 행렬의 첫번째 행의 첫번째 요소 sum(mat[1,1:5]) 있어야 2 요소 sum(mat[1,6:10])되고 마지막 요소 sum(mat[1,46:50])이다. new.mat의 두 번째 행은 (sum(mat[2,1:5]), sum(mat[2,6:10),...)입니다.

가능하면 for 루프를 피하는 것이 좋습니다. 고맙습니다!

답변

4

rowsum은 여기에서 유용한 기능입니다. 당신은 당신은 c(1,1,1,1,1,2,2,2,2,2,....,10,10,10,10,10)

grp <- rep(seq_len(ceiling(ncol(mat)/5)), each = 5, length.out = ncol(mat)) 
# this will also work, but may be less clear why. 
# grp <- (seq_len(ncol(mat))-1) %/%5 

rowsum 같은이 숫자의 행에 걸쳐 열 합계를 계산 매트릭스처럼 그룹화 벡터를 만들 필요는

원하는 것을 얻을 t ransposing의 조금을해야 할 것 당신은 열에서 행 합계 찾고있는 그룹화 변수

의 각 수준에 대한 오브젝트 당신은 당신의 결과 (그리고 입력)

t(rowsum(t(mat),grp)) 
트랜스해야합니다 있도록
+0

감사합니다! 그건 정말 도움이 :) – alittleboy