본문 바로가기
데이터 [Data]/R

R 데이터 구조: 행렬, 배열

by 냉철하마 2021. 4. 22.

참고도서: R 통계 프로그래밍의 이해 - 차영준, 박진표 (자유아카데미) 2장

www.yes24.com/Product/Goods/68712840

 

R 통계 프로그래밍의 이해

'최근에 빅데이터와 관련된 용어들이 많이 사용되고 있다. 인공지능, 머신러닝, 데이터 과학, 데이터 과학자, 4차 산업혁명 등과 같은 단어들을 많이 접하게 된다. 이처럼 많은 사람들이 빅데이

www.yes24.com

 

> #### 2.4 행렬 ####

>

> # 2.4.1 matrix() 함수를 이용한 행렬의 생성 #

>

> #matrix() 함수 이용한 행렬의 생성

> matrix(c(1,2,3,4,5,6), ncol=2) ## 2개인 행렬 생성

   [,1] [,2]

[1,] 1 4

[2,] 2 5

[3,] 3 6

> matrix(c(1,2,3,4,5,6), nrow=2) ## 2개인 행렬 생성

   [,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

> matrix(c(1,2,3,4,5,6), nrow=2, byrow = FALSE) ## 행 기준 FALSE = 열 기준으로 행렬 생성 (기본값)

   [,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

> matrix(c(1,2,3,4,5,6), nrow=2, byrow = TRUE) ## 행 기준으로 행렬 생성

   [,1] [,2] [,3]

[1,] 1 2 3

[2,] 4 5 6

>

> #matrix() 함수의 인수 dimnames

> matrix(c(1,2,3,4,5,6), nrow=2, dimnames = list(c("row1","row2"),c("column1","column2","column3")))

   column1 column2 column3

row1 1 3 5

row2 2 4 6

> ## 원소가 1~6까지인 2행짜리 행렬에 row1~2, column1~3까지의 이름 부여

> mData <- matrix(c(1,2,3,4,5,6), nrow = 2)

> dimnames(mData) <- list(c("row1","row2"),c("column1","column2","column3"))

> mData ## 위와 동일한 방법, mData라는 변수를 이용

   column1 column2 column3

row1 1 3 5

row2 2 4 6

>

> #rownames()colnames()를 이용한 행과 열에 이름 부여

> mData <- matrix(c(1,2,3,4,5,6), nrow=2)

> rownames(mData) <- paste0("row", 1:2) ## mData 행렬에 행 이름을 "row1""row2"로 부여

> mData

   [,1] [,2] [,3]

row1 1 3 5

row2 2 4 6

>

> colnames(mData) <- paste0("column", 1:3) ## mData 행렬에 열 이름을 "column1"에서 "column3"으로 부여

> mData

   column1 column2 column3

row1 1 3 5

row2 2 4 6

>

>

> # 2.4.2 cbind()rbind() 함수를 이용한 행렬 생성 #

> w <- 1:3

> x <- 4:6

> y <- 7:9

> z <- 10:12

>

> cbind(w,x,y,z) ## c(olumn)bind: 열 단위로 묶어 행렬 생성

w x y z

[1,] 1 4 7 10

[2,] 2 5 8 11

[3,] 3 6 9 12

> rbind(w,x,y,z) ## r(ow)bind: 행 단위로 묶어 행렬 생성

   [,1] [,2] [,3]

w 1 2 3

x 4 5 6

y 7 8 9

z 10 11 12

>

> # 2.4.3 dim()을 이용한 행렬 생성 #

> a <- 1:6

> dim(a) = c(2,3) ## 2 x 3 행렬 생성

> a

   [,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

>

> a <- c(22,45,17,62,20,87,22,45)

> dim(a) = c(4,2)

> a

    [,1] [,2]

[1,] 22 20

[2,] 45 87

[3,] 17 22

[4,] 62 45

>

> # 2.4.4 첨자 []을 이용한 행렬의 원소 추출 #

> M <- matrix(1:15, nrow=3) ## 원소가 1부터 15까지인, 3행짜리 행렬 생성

> M

   [,1] [,2] [,3] [,4] [,5]

[1,] 1 4 7 10 13

[2,] 2 5 8 11 14

[3,] 3 6 9 12 15

> M[1,1] ## 11열 원소 추출

[1] 1

> M[1,] ## 1행 원소 전체 추출

[1] 1 4 7 10 13

> M[,1] ## 1열 원소 전체 추출

[1] 1 2 3

> M[1:2,] ## 1~2행 원소 전체 추출

[,1] [,2] [,3] [,4] [,5]

[1,] 1 4 7 10 13

[2,] 2 5 8 11 14

> M[-1,] ## 1행 원소 제외한 전체 추출

[,1] [,2] [,3] [,4] [,5]

[1,] 2 5 8 11 14

[2,] 3 6 9 12 15

> M[-1:-2,] ## 1~2행 원소 제외한 전체 추출 (-(1:2) = -1:-2)

[1] 3 6 9 12 15

> M[,1:2] ## 1~2열 원소 전체 추출

   [,1] [,2]

[1,] 1 4

[2,] 2 5

[3,] 3 6

> M[,-(1:2)] ## 1~2열 원소 제외한 전체 추출

   [,1] [,2] [,3]

[1,] 7 10 13

[2,] 8 11 14

[3,] 9 12 15

>

> # 2.4.5 행렬의 사칙연산 #

> A <- matrix(c(1,2,3,4), ncol=2) ## 열이 2개인 행렬 생성

> A

   [,1] [,2]

[1,] 1 3

[2,] 2 4

> B <- matrix(c(4,3,2,1), ncol=2)

> B

   [,1] [,2]

[1,] 4 2

[2,] 3 1

>

> A+B

   [,1] [,2]

[1,] 5 5

[2,] 5 5

> A-B

   [,1] [,2]

[1,] -3 1

[2,] -1 3

> A*B

   [,1] [,2]

[1,] 4 6

[2,] 6 4

> A/B

    [,1]           [,2]

[1,] 0.2500000 1.5

[2,] 0.6666667 4.0

> A^2 ## A 행렬 원소의 2제곱한 값

   [,1] [,2]

[1,] 1 9

[2,] 4 16

>

>

> # 2.4.6 행렬의 곱셈 #

> A %*% B

   [,1] [,2]

[1,] 13 5

[2,] 20 8

> t(A) %*% B ## 행렬 A의 전치행렬과 행렬 B의 곱

   [,1] [,2]

[1,] 10 4

[2,] 24 10

> crossprod(A,B) ## 행렬 A의 전치행렬과 행렬 B의 곱

   [,1] [,2]

[1,] 10 4

[2,] 24 10

>

> # 2.4.7 행렬의 역행렬 #

> A <- matrix(c(1,2,3,4), ncol=2)

> A

   [,1] [,2]

[1,] 1 3

[2,] 2 4

> solve(A) ## solve() = 역행렬 구하는 함수

   [,1] [,2]

[1,] -2 1.5

[2,] 1 -0.5

> b=c(1,5)

> solve(A,b) ## Ax=b의 해 x를 구하는 코딩

[1] 5.5 -1.5

> solve(A) %*% b

     [,1]

[1,] 5.5

[2,] -1.5

>

>

>

> #### 2.5 배열 ####

>

> #array() 함수를 이용한 배열의 생성

> array(1:12, c(2,3,2)) ## 2 X 3 X 2 배열 생성

, , 1

 

   [,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

 

, , 2

 

   [,1] [,2] [,3]

[1,] 7 9 11

[2,] 8 10 12

 

>

> #array() 함수의 인수 dimnames

> array(1:12, c(2,3,2), dimnames=list(c("r1","r2"),c("c1","c2","c3"),c("Exam1","Exam2")))

, , Exam1

 

   c1 c2 c3

r1 1 3 5

r2 2 4 6

 

, , Exam2

 

   c1 c2 c3

r1 7 9 11

r2 8 10 12

 

> ## 배열 생성 시 이름 삽입: =r1~r2, =c1~c3, =Exam1~Exam2

 

댓글