본문 바로가기

데이터 분석/R

[R] R 데이터 종류 #2 - 리스트, 행렬, 배열

R의 데이터 종류에는 스칼라, 벡터, 리스트, 행렬, 배열, 데이터 프레임이 있다. 이번 포스팅에는 리스트, 행렬, 배열을 알아보자.

[리스트]


리스트는 서로 다른 구조의 데이터를 모두 묶은 객체를 말한다. 리스트는 키, 값 형태의 데이터를 담는 연관 배열이다.

> a <- list(x=1:4,y=c("일","이","삼","사"))

> a$x
# [1] 1 2 3 4

> a[2]
#$y
#[1] "일" "이" "삼" "사"

> x[[2]]
#[1] "일" "이" "삼" "사"

 

  • x$key : 리스트 x에서 키 값 key에 해당하는 값
  • x[n] : 리스트 x에서 n번째 데이터의 서브리스트
  • x[[n]] : 리스트 x에서 n번째에 저장된 값

 

[행렬(Matrix)]


행렬은 동일한 유형의 2차원 데이터구조이다.

 

matrix(벡터 값, nrow=행의 수, ncol=열의 수, byrow=T (행우선) or F(열우선) 데이터 채움, dimnames=행렬의 각 차원의 이름 저장)

x = matrix(1:6,nrow=3)
x
#       [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6


dimnames(x) <- list(c("r1","r2","r3"),c("c1","c2")) # 행렬의 각 차원의 이름 저장
x
#   c1 c2
# r1  1  4
# r2  2  5
# r3  3  6


x = matrix(1:6,nrow=3, byrow = T) # 행우선으로 데이터를 채움
x
#       [,1] [,2]
# [1,]    1    2
# [2,]    3    4
# [3,]    5    6

 

 


[행렬 데이터 접근]

m <- matrix(1:9, nrow = 3, byrow = T) # 행의 개수 지정하고 행 우선으로 자료를 채움
m
#       [,1] [,2] [,3]
# [1,]    1    2    3
# [2,]    4    5    6
# [3,]    7    8    9
dim(m) #  3 3

m[1] # 1

m[1,] # 1 2 3, 1행이 나옴

m[,1] # 1 4 7

m[, -1]
#       [,1] [,2]
# [1,]    2    3
# [2,]    5    6
# [3,]    8    9

m[-1, -1]
#       [,1] [,2]
# [1,]    5    6
# [2,]    8    9


m[1,c(1,3)] # 1 3


rownames(m) <- c('r1','r2','r3')
colnames(m) <- c('하나','둘','셋')
m
#     하나 둘 셋
# r1    1  2  3
# r2    4  5  6
# r3    7  8  9

m['r1',]
# 하나   둘   셋 
#   1    2    3 

dim(m) # 3 3
length(m) # 9
NROW(m) # 행의 개수 확인 3
nrow(m) # 소문자도 가능

 

 

[행렬의 연산]

 

# 연산
a <- matrix(c(1,2,3,4),nrow=2,ncol=2)
a
#       [,1] [,2]
# [1,]    1    3
# [2,]    2    4
b <- matrix(5:8 , 2, 2)
b
#       [,1] [,2]
# [1,]    5    7
# [2,]    6    8

a + b
#       [,1] [,2]
# [1,]    6   10
# [2,]    8   12

a - b
#       [,1] [,2]
# [1,]   -4   -4
# [2,]   -4   -4

a / b
#           [,1]      [,2]
# [1,] 0.2000000 0.4285714
# [2,] 0.3333333 0.5000000

a * b
#       [,1] [,2]
# [1,]    5   21
# [2,]   12   32

a %*% b # 행렬 곱셈
#       [,1] [,2]
# [1,]   23   31
# [2,]   34   46




diag(a) # 대각 요소 값 추출 [1] 1 4
diag(3)
#       [,1] [,2] [,3]
# [1,]    1    0    0
# [2,]    0    1    0
# [3,]    0    0    1


t(a) # 전치, 행렬전환
#       [,1] [,2]
# [1,]    1    2
# [2,]    3    4


solve(a) # 역행렬
#       [,1] [,2]
# [1,]   -2  1.5
# [2,]    1 -0.5
solve(solve(a))
#       [,1] [,2]
# [1,]    1    3
# [2,]    2    4

 

 

[배열]


동일한 유형의 N차원 데이터 구조이다. (행렬 : 2차원 데이터 구조, 배열 : N차원)

arr <- array(1:12, dim = c(3,2,2)) # 3행 2열 2면 구조의 배열
arr
# , , 1
# 
#       [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6
# 
# , , 2
# 
#      [,1] [,2]
# [1,]    7   10
# [2,]    8   11
# [3,]    9   12

 

 

[배열 데이터 접근]

dim(arr) # 차원 반환
# [1] 3 2 2

arr[,,1] # 1면만 추출
#       [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6

arr[,1,1] # 1면 1열만 추출
# [1] 1 2 3

arr[1,,1] # 1면 1행만 추출
# [1] 1 4

arr[1,1,1] # 1면 1행 1열만 추출
# [1] 1