2011-09-21 7 views
1

행렬 수정에 대한 질문이 있습니다. 나는 같은 차원의 다른 행렬의 값 에 따라 행렬의 값을 변경했다. 하지만 이제는 다른 차원의 이있는 행렬에이 절차를 적용해야합니다. 다시 말해 더 큰 행렬의 "영역"에 약간의 변경을 적용하기를 원합니다. 작은 행렬의 값에 대해서는 에 따라 더 작은 행렬의 위치가 더 크다는 것을 알고 있습니다.R 다른 행렬/데이터 프레임에 따라 행렬/데이터 프레임의 영역 수정

이 행렬이다한다고 가정

1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 

및 B

0 0 0 0 0 0 
0 1 1 1 1 0 
0 0 1 1 1 0 
0 0 1 1 0 0 
0 0 0 0 0 0 

I가 B [1,1] I는 A [2,1] 수정 확인해야 값임을 알 B [2,1] A [3,1]을 위해 등등 ...

내가 찾고 있어요 최종 결과는

1 2 3 4 5 6 7 8 
1 2 0 0 0 0 7 8 
1 2 3 0 0 0 7 8 
1 2 3 0 0 6 7 8 
1 2 3 4 5 6 7 8 
0123입니다 는 A 용 516,

교체 난 (I 1시 10분 단위) 내 일본어 스크립트

에서 루프를 사용하여 값 [== B I] = 0 일

때 및 B는 같은 치수를 가지고 있습니다.

매트릭스 A로 대체하려면 어떻게해야합니까? 대다? for 루프?

도움을 주시면 감사하겠습니다. 물론 제가 아직 읽지 않은 기본적인 독서를 가르쳐 주실 수 있습니다.

+0

어떻게 "빈"영역을 배치해야하는지 알고리즘에서 알 수 있습니까? 컴퓨터의 관점에서 그는 작은 매트릭스를 왼쪽이나 오른쪽으로 이동할 수 있습니다. –

+0

@ RomanLuštrik 안녕하세요, 내 데이터는 지리적 그리드에 있으므로 각 점에 대한 위도 경도가 있습니다. 그래서 두 행렬의 어느 행과 열이 같은 지리적 위치에 있는지 계산할 수 있습니다. – pacomet

+1

공간 작업보기를 살펴볼 것을 제안합니다. 'sp' 패키지는 공간 데이터를 다루는 클래스를 가지고 있습니다. http://cran.r-project.org/web/views/Spatial.html 달성하려는 것은 기본적으로 "마스킹"입니다. –

답변

2

단지의 행렬을 선택하고 당신이 원하는 것을 할 예 :

A[1:5,2:8][B == 1] = 0 

또는 일반적으로, [행 안부]는 행렬 A에 행렬 B의 시작 위치 인 경우

A[row:nrow(A),col:ncol(A)][B == 1] = 0 
은 Andrie 호 for hinting me the ncol function 이달에

A = matrix(rep(1:8, each = 5), nrow = 5) 
B = matrix(c(rep(0, 7), 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, rep(0, 8)), nrow = 5, byrow = TRUE) 
A[1:5,2:8][B == 1] = 0 

감사합니다 : 당신이 그것을 작동 확인할 수 있도록 여기

는 테스트 코드입니다 ead of lugly dim (A) [2] ...

+0

감사합니다. Tomas, 예제가 잘 돌아갑니다. 그것은 내가 필요한 것입니다. 내일 직장에서 나는 내 데이터로 시도 할 것이다. – pacomet