매일공부

[R기초] Data object : Matrix 자료형 본문

Programming/R

[R기초] Data object : Matrix 자료형

aram 2023. 7. 24. 15:31

 

matrix(data, nrow=숫자, ncol=숫자, byrow=, dimnames=)

  • data : 데이터
  • nrow : 행의 수
  • ncol : 열의 수
  • byrow : T - 행 우선, F - 열 우선. 기본값 : F
  • dimnames : 행, 열의 이름 설정

 

# 생성

mat1 = matrix(c(1,2,3,4,5)) #4행 1열.
    #     [,1]
    #[1,]    1
    #[2,]    2
    #[3,]    3
    #[4,]    4
    #[5,]    5

mat2 <- matrix(c(1,2,3,4), nrow=2) #2행2열. 열우선 생성
  #     [,1] [,2]
  # [1,]    1    3
  # [2,]    2    4

mat3 <- matrix(c(1,2,3,4), nrow=2, byrow=T) #2행2열. 행우선 생성
  #     [,1] [,2]
  # [1,]    1    2
  # [2,]    3    4

mat4 <- matrix(c(1,2,3,4), byrow=T) #1행4열. 행우선 생성
  #      [,1]
  # [1,]    1
  # [2,]    2
  # [3,]    3
  # [4,]    4
  
# Q. mat5 변수에 1-9까지 숫자를 3행 3열 매트릭스 생성
mat5 <- matrix(1:9, nrow=3, byrow=T)
  #     [,1] [,2] [,3]
  #[1,]    1    2    3
  #[2,]    4    5    6
  #[3,]    7    8    9

 

# 조회

  • [ , 숫자] : 열 조회
  • [숫자, ] : 행 조회
  • [숫자, 숫자] : 행과 열 사이 숫자 값 조회
#값을 조회하기
#1열의 값 조회
mat3[,1]  #1 3
#1행의 값 조회
mat3[1,]  #1 2
#2행 2열 값 조회
mat3[2,2] #4

 

# 추가

  • rbind() : 행 추가
  • cbind() : 열 추가
#행추가 : rbind()
mat5 <- rbind(mat5, c(11,12,13)) #4행 3열
  #      [,1] [,2] [,3]
  # [1,]    1    2    3
  # [2,]    4    5    6
  # [3,]    7    8    9
  # [4,]   11   12   13

#열추가 : cbind()
mat5 <- cbind(mat5, c(10,11,12,13)) #4행 4열
  #     [,1] [,2] [,3] [,4]
  # [1,]    1    2    3   10
  # [2,]    4    5    6   11
  # [3,]    7    8    9   12
  # [4,]   11   12   13   13

mat5 <- rbind(mat5, c(11,12,13)) #Warning: 개수 동일해야함

 

# 컬럼 이름 설정

  • colnames() : 열 이름 설정
  • rownames() : 행 이름 설정
# a,b,c,d 4개 문자열을 2행2열 matric 객체로 생성
mat6 <- matrix(c('a','b','c','d'), nrow=2, byrow=T)
  #    [,1] [,2] [,3]
  #[1,] "a"  "b"  "e" 
  #[2,] "c"  "d"  "f"

colnames(mat6) <- c('First','Second','Third')
  #    First Second Third
  #[1,] "a"   "b"    "e"  
  #[2,] "c"   "d"    "f"  

rownames(mat6) <- c("one", "two")
  #   First Second Third
  #one "a"   "b"    "e"  
  #two "c"   "d"    "f"

 

# 개수 및 자료형 확인

  • nrow() : 행 개수 리턴
  • ncol()   : 열 개수 리턴
  • length() : 속성 개수 확인
  • mode() : 요소 자료형
nrow(mat6) #2 행 개수 리턴
ncol(mat6) #3 열 개수 리턴
length(mat6) #6 개수확인
mode(mat6) #"character" 요소 자료형

 

# matrix 연산

  •    a*b     : 행렬 성분의 곱
  • a%*%b  : 행렬의 곱
  • t(행렬)   : 전치행렬 - 행과 열을 바꿈
  • solve(행렬) : 역행렬 - 행렬의 곱의 결과가 단위행렬인 행렬
  •    %%    : 단위행렬 - 대각선=1, 나머지=0
  • 합계
     : colSums(행렬, na.rm=T)  열별 합계
     : rowSums(행렬, na.rm=T) 행별 합계
  • (, na.rm=T) : 결측값 제외
  • 평균
    : colMeans(행렬) 열별 평균
    : rowMeans(행렬) 행별 평균
a <- matrix(1:3, 3,3)
  #     [,1] [,2] [,3]
  #[1,]    1    1    1
  #[2,]    2    2    2
  #[3,]    3    3    3
b <- matrix(4:6, 3,3)
  #      [,1] [,2] [,3]
  # [1,]    4    4    4
  # [2,]    5    5    5
  # [3,]    6    6    6

a*b #행렬 성분의 곱
  #      [,1] [,2] [,3]
  # [1,]    4    4    4
  # [2,]   10   10   10
  # [3,]   18   18   18

a%*%b # 행렬의 곱
  #      [,1] [,2] [,3] :: a의 각 행 * b의 각 열
  # [1,]   15   15   15 : 1*4+1*5+1*6
  # [2,]   30   30   30 : 2*4+2*5+2*6
  # [3,]   45   45   45 : 3*4+3*5+3*6

c <- matrix(c(1,-2,4,-1,3,-5,2,7,5), 3,3)
  #      [,1] [,2] [,3]
  # [1,]    1   -1    2
  # [2,]   -2    3    7
  # [3,]    4   -5    5

t(c) #전치행렬
  #      [,1] [,2] [,3]
  # [1,]    1   -2    4
  # [2,]   -1    3   -5
  # [3,]    2    7    5

c1 = solve(c) #역행렬
  #       [,1]   [,2]   [,3]
  # [1,]  6.25 -0.625 -1.625
  # [2,]  4.75 -0.375 -1.375
  # [3,] -0.25  0.125  0.125

c %*% c1 # 단위행렬
  #      [,1] [,2] [,3]
  # [1,]    1    0    0
  # [2,]    0    1    0
  # [3,]    0    0    1

colSums(c) #3 -3 14  열별 합계
rowSums(c) #2 8 4  행별합계

x <- rep(1:4, 4)
x[9] = NA
m <- matrix(x, nrow=4)
  #      [,1] [,2] [,3] [,4]
  # [1,]    1    1   NA    1
  # [2,]    2    2    2    2
  # [3,]    3    3    3    3
  # [4,]    4    4    4    4

colSums(m) #10 10 NA 10 : 행의 합
rowSums(m) #NA  8 12 16 : 열의 합

# 결측값 제외
colSums(m, na.rm=T) # 10 10 9 10  행의 합
rowSums(m, na.rm=T) # 3  8 12 16  열의 합

# m matrix의 행의 평균, 열의 합 출력
colMeans(m, na.rm=T) # 2.5 2.5 3.0 2.5
rowMeans(m, na.rm=T) # 1 2 3 4

 

* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.

728x90
Comments