7.6 행렬의 수정

7.6.1 행렬의 수정

위에서 행렬에 대한 접근방법을 할당 연산자와 결합하면 행렬을 수정할 수 있다.

mat
##       col.1 col.2 col.3 col.4
## row.1     1     5     3     6
## row.2     3     6     4     8
## row.3     2     4     8     7
mat[2,2] <- 10; mat         # 2행 2열의 단일 요소 값을 수정합니다.
##       col.1 col.2 col.3 col.4
## row.1     1     5     3     6
## row.2     3    10     4     8
## row.3     2     4     8     7
mat[mat < 5] <- 0; mat      # 5보다 작은 요소의 값은 모두 0으로 수정합니다.
##       col.1 col.2 col.3 col.4
## row.1     0     5     0     6
## row.2     0    10     0     8
## row.3     0     0     8     7

7.6.2 행과 열의 추가

rbind()cbind()함수를 사용하여 행이나 열을 각각 추가 할 수 있습니다.

mat
##       col.1 col.2 col.3 col.4
## row.1     0     5     0     6
## row.2     0    10     0     8
## row.3     0     0     8     7
# cbind() 함수를 이용하여 열 벡터를 추가합니다.
mat <- cbind(mat, c(7, 6, 7))         # mat 행렬에 (7 6 7) 컬럼을 추가합니다
mat
##       col.1 col.2 col.3 col.4  
## row.1     0     5     0     6 7
## row.2     0    10     0     8 6
## row.3     0     0     8     7 7
# rbind() 함수를 이용하여 행 벡터를 추가합니다.
mat <- rbind(mat, c(1,2,3))           # c(1, 2, 3)과 같이 요소 수가 적은 경우
## Warning in rbind(mat, c(1, 2, 3)): number of columns of result is not a multiple
## of vector length (arg 2)
mat                                   # 경고메시지가 나타나며, 자동반복으로 채워집니다.
##       col.1 col.2 col.3 col.4  
## row.1     0     5     0     6 7
## row.2     0    10     0     8 6
## row.3     0     0     8     7 7
##           1     2     3     1 2

7.6.3 행렬의 서브세팅

앞에서 학습한 행렬 요소의 접근 방법으로 접근한 요소들을 새로운 변수에 할당연산자로 할당하여 행렬을 서브 세팅할 수 있습니다.

# 행렬 mat를 생성합니다.
mat <- rbind(c(1, 5, 3, 6),
             c(3, 6, 4, 8),
             c(2, 4, 8, 7))
mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    3    6
## [2,]    3    6    4    8
## [3,]    2    4    8    7
# 행과 열에 이름을 붙입니다.
rownames(mat) <- c("row.1", "row.2", "row.3")
colnames(mat) <- c("col.1", "col.2", "col.3", "col.4")
mat
##       col.1 col.2 col.3 col.4
## row.1     1     5     3     6
## row.2     3     6     4     8
## row.3     2     4     8     7
## row와 col을 정수형 벡터로 색인합니다.
mat1 <- mat[c(1,2),c(2,3)]     # 1 & 2행과 2 & 3열이 교차하는 요소를 서브세팅하여 mat1에 할당합니다.
mat2 <- mat[c(3,2), ]          # 3행과 2열의 순서로 전체 열의 요소를 서브세팅하여 mat2로 할당합니다.
mat3 <- mat[-1,]               # 1행을 제외한 요소를 서브세팅하여 mat3에 할당합니다.