워라밸 중독자

[R] 1차원 데이터 구조 - 팩터(factor)와 리스트(list) 본문

코딩, 딱 지금이 시작할때! (코딱지)

[R] 1차원 데이터 구조 - 팩터(factor)와 리스트(list)

Ufungi 2023. 1. 6. 00:39

데이터 분석시 주로 벡터를 다루며, 팩터 리스트는 많이 다루지 않는다. 그래도 한 번 알아보자.

 

[R] 벡터(vector) 정의 및 생성

벡터(vector)란? 동일한 자료형(정수, 실수, 문자, 논리)의 값이 연속적으로 나열된 자료구조이다. 엑셀에서 '한 행'에 해당하며 일차원 데이터를 저장한다. 벡터 만들기 1. c 함수 concatenate의 첫 글

ufungi.tistory.com

팩터 (factor)

벡터의 일종이지만 지정된 원소가 아닌 값은 허용하지 않는다.

*  read.csv() 함수를 이용해 파일을 불러오면 문자형 column 은 factor로 저장된다!

factor(): 팩터 생성

# 팩터의 생성
> fungi <- factor(c("mold", "mold", "mushroom", "yeast"))

# 팩터에 지정되지 않은 값 넣어보기
> fungi[5] <- "bird"
Warning message:
In `[<-.factor`(`*tmp*`, 5, value = "bird") :
  요인의 수준(factor level)이 올바르지 않아 NA가 생성되었습니다.
> fungi
[1] mold mold mushroom yeast <NA> # 5번째 값에 bird가 들어가지 않고 경고문이 뜨면서 NA가 생성됨
Levels: mold mushroom yeast

# 팩터에 넣을 수 있는 값 보기
> levels(fungi)
[1] "mold" "mushroom" "yeast" # unique 함수와 유사하게 고유한 값들을 출력

# 팩터의 각 값이 몇번째 level에 대응하는지 출력
> as.numeric(fungi)
[1]  1  1  2  3 NA

 

리스트 (list)

동일한 자료형의 원소가 여러개인 데이터. 모든 자료형 및 데이터 구조를 포함할 수 있다. 파이썬의 dictionary 자료형과 유사하여 key - value로 이루어진다. 아래 예시에서처럼 = 를 기준으로 왼쪽은 key, 오른쪽은 value에 해당한다.

list(): 리스트 생성

> mat <- matrix(1:20, nrow = 4)

# 리스트의 생성
> morphology <- list(specimen.no = "SFC20210721-01",
                    genus = "Amanita",
                     spore.color = "white",
                     ring = TRUE,
                     spore.length = c(2.5, 2.1, 2.6, 2.8, 2.4),
                     spore.width = c(3.1, 3.1, 3.0, 2.9, 3.4),
                     matrix = mat)
> morphology
$specimen.no
[1] "SFC20210721-01"

$genus
[1] "Amanita"

$spore.color
[1] "white"

$ring
[1] TRUE

$spore.length
[1] 2.5 2.1 2.6 2.8 2.4

$spore.width
[1] 3.1 3.1 3.0 2.9 3.4

$matrix
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

 

리스트는 위 예시처럼 문자형, 논리형, 숫자형의 자료형 뿐만 아니라 벡터, 행렬 등 모든 데이터 구조를 포함할 수 있다.

 

리스트의 인덱싱은 [], [[]], $ 연산자를 이용한다.

> morphology[5] # [] 한 개만 쓰면 list를 출력
$spore.length
[1] 2.5 2.1 2.6 2.8 2.4

> morphology[[5]] # [] 두 개 써야 원래 데이터 구조를 출력
[1] 2.5 2.1 2.6 2.8 2.4

> morphology$spore.length # $를 써도 원래 데이터 구조를 출력
[1] 2.5 2.1 2.6 2.8 2.4

> morphology$matrix
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20