본문 바로가기
my_lesson/_R_컴퓨팅

R_컴퓨팅 - 데이터의 구조[2] 행렬 과 배열

by boolean 2019. 2. 11.
728x90

R_컴퓨팅 - 데이터의 구조[2] 행렬 

행렬

행렬의 주요 속성


 속성

설명 

length 

자료의  개수 

mode 

자료의 형태 

dim 

행과 열의 개수 

dimnames 

행과 열의 이름 


행렬의 생성

Exam:

matrix() 함수를 이용하여 1에서 9까지의 원소를 갖는 3행 3열의 행렬을 생성하라

각 행과 열의 이름을 row1, row2, row3, col1, col2, col3로 지정한 뒤 출력하라.

Solution:

>matr <-  matrix(1:9, nrow=3)     #3행 3열 행렬 생성

>dimnames(matr) <- list(paste("row", c(1:3)), paste("col", c(1:3)))    #행과 열의 이름 지정

>matr


 

row1 

row2 

row3 

col1 

col2 

col3 


Exam:

위에서 matrix() 함수를 이용하여 생성된 행렬과 동일한 형태의 행렬을 rbind(), cbind(), dim() 항수를 이용하여 만들어라

Solution:

>r1 <- c(1, 4, 7)     # 벡터 생성

>r2 <- c(2, 5, 8)

>r3 <- c(3, 6, 9)

>ratrRb <- rbind(r1, r2, r3)

>c1 <-1:3     # 벡터생성

>c2 <-4:6

>c3 <-7:9

>ratrCb <- cbind(c1, c2, c3)

>m1 <- 1:9

>dim(m1) <- c(3, 3,)     # dim : 차원을 지정


행렬의 연산

[ ] 를 이용하여 행렬의 일부 원소를 추출
apply() 함수를 이용한 행 또는 열의 연산
sweep() 함수를 이용한 행 또는 열의 연산


Exam:

1에서 9까지의 원소를 갖는 행 기준의 3행 3렬 행렬을 만들어라

특정 행과 열, 조건에 따를 원소 추출들을 실행하고

apply()와 sweep() 함수를 이용한 행 또는 열 연산들 실시하라.

Solution:

>mat <- matrix(1:9, ncol=3, byrow=T)

>mat[1, ]     # 1행의 값

>mat[ , 3]    # 3열의 값

>mat[mat[ , 3]>4, 2]     # 3열에서 4보드 큰 값중 2열의 모든 값

>mat[2, 3]     # 2행 3열의 값


>height <- c(140,155,142,175)

>seze.1 <- matrix(c(130,26,110,24,118,25,112,25), ncol=2, byrow=T, dimnames=list(c("Lee", "Kim", "Park", "Choi"), c("Weight", "Waist")))

>size <- cbind(size.1, height)

 

Weight 

Waist 

Height 

Lee 

130 

26 

140 

Kim 

110 

24 

155 

Park 

118 

25 

142 

Choi 

112 

25 

175 

>colmean <- apply(size, 2, mean)     # 2: 열의 평균을 구하라

>rowmean <- apply(size, 1, mean)     #1: 행의 평균을 구하라

>colvar <- apply(size, 2, var)     # 열의 분산값을 구하여라

>sweep(size, 2, colmean)     # 각 열의 값과 colmean의 차를 구하라

>sweep(seze, 1, c(1,2,3,4), "+")     #각 행의 값에 c(1,2,3,4)값을 더하라




Exam:

1에서 4까지의 값을 갖는 열 기준 행렬 m1과 5에서 8까지의 값을 갖는 열기준 행렬 m2를 생성하라

두 행렬의 곱, m1의 전치행렬 및 m1의 역행렬을 구하라

Solution:

>m1 <- matrix(1:4, ncol=2)

>m2 <- matrix(5:8, ncol=2)

>m1%*%m2     #  %*% : 행렬의 곱셈

>solve(m1)     # solve() : 역행렬 생성

>t(m1)     # t() : 전치행렬 생성



배열

배열의 주요 속성

 속성

설명

length

자료의 개수

mode

자료의 형태

dim

각 차원의 백트의 크기

dimnames

각 차원 리스트의 이름


Exam:

1에서 18까지 의 원소를 갖는 3행 3열의 행렬 2개를 생성하라

Solution:

>arr <- array(1:18, c(3,3,2))    #1에서 18까지의 자료 생성

>dimnames(arr)<-list(paste("row", c(1:3)), paste("col", c(1"3)), paste("arr", c(1:2)))

>length(arr)     #18

>mode(arr)     # [1] "numeric"

>dim(arr)     # [1] 3 3  2



Exam:

array() 함수를 이용하여 1에서 6까지 의 자료로 1차원 및 2차원 배열을 생성해보라

1에서 8까자 값으로 3차원 배열을 생성하라

dim()함수를 이용하여 1 ~24까지 자료로 3행 4열 행렬 2개를 생성하라.

Solution:

>arr <- array(1:6)    # 1차원 배열

>arr <- array(1:6, c(2,3)     #2차원 배열

>arr <- array(1:6, c(2,2,2)     # 3차원 배열

>arr <- c(1:24)

>dim(arr)<-c(3,4,2)     # 3행 4열 2개 생성

>arr[ , , 1]     # 1번째 행렬의 모든 원소

>arr[ , , ]     # 모든 행렬의 모든 원소

>arr[1,1, ]     # 모든 행렬의 1행 1열의 원소 출력

>arr[1, ,-2]     # 2번째 행렬을 제외한 1행의 모든 원소



댓글