3-1. factor()에 의한 명목형 데이터 생성
> gender <- c("m", "m", "f", "f", "f", "f", "m", "f", "f", "m")
> gender
[1] "m" "m" "f" "f" "f" "f" "m" "f" "f" "m"
> mode(gender)
[1] "character"
> genderF <- factor(gender)
> genderF
[1] m m f f f f m f f m
Levels: f m
> is.factor(genderF)
[1] TRUE
> mode(genderF)
[1] "numeric"
> gender <- c(2, 2, 1, 1, 1, 1, 1, 2, 2, 1)
> gender
[1] 2 2 1 1 1 1 1 2 2 1
> factor(gender)
[1] 2 2 1 1 1 1 1 2 2 1
Levels: 1 2
> genderFactor <- factor(gender, levels=c(1,2), labels=c("F", "M"))
> genderFactor
[1] M M F F F F F M M F
Levels: F M
> is.factor(genderFactor)
[1] TRUE
> levels(genderFactor)
[1] "F" "M"
3-2. factor()에 의한 순서형 데이터 생성
Example) factor() 함수를 이용하여 순서에 의미가 있는 범주형 데이터 생성
> size <- c("S", "M", "S", "L", "M", "S", "M", "S", "S", "M")
> factor(size)
[1] S M S L M S M S S M
Levels: L M S
> as.numeric(factor(size))
[1] 3 2 3 1 2 3 2 3 3 2
> factor(size, levels=c("S", "M", "L"))
[1] S M S L M S M S S M
Levels: S M L
> factor(size, levels=c("S", "M", "L"), ordered = TRUE)
[1] S M S L M S M S S M
Levels: S < M < L
> size <- c("S", "M", "S", "L", "M", "S", "M", "S", "S", "M")
> factor(size, levels = c("S", "M", "L"), labels = c("Small", "Medium","Large"))
[1] Small Medium Small Large Medium Small Medium Small Small Medium
Levels: Small Medium Large
> size <- c(1, 2, 1, 3, 2, 1, 2, 1, 1, 2)
> size <- factor(size, labels = c("Small", "Medium", "Large"), ordered = TRUE)
> size
[1] Small Medium Small Large Medium Small Medium Small Small Medium
Levels: Small < Medium < Large
3-3. cut() 함수
Example
1) cut(x, breaks = 3)은 1부터 5까지의 수를 3개의 구간으로 나누는 코드
labels = FALSE는 3개의 구간을 각각 하나의 정수로 표시
2) cut(y, breaks=c(0, 60, 70, 80, 90, 100), right=FALSE, labels=c("F", "D", "C", "B", "A))는 최댓값이 어느 구간에도 포함되지 않으므로 생기는 오류이다.
따라서, include.lowest=TRUE를 이용하여 오류를 수정한다
> x <- c(1, 2, 3, 4, 5)
> cut(x, breaks = 3)
[1] (0.996,2.33] (0.996,2.33] (2.33,3.67] (3.67,5] (3.67,5]
Levels: (0.996,2.33] (2.33,3.67] (3.67,5]
> cut(x, breaks = 3, labels = FALSE)
[1] 1 1 2 3 3
> cut(x, breaks = 3, right = FALSE)
[1] [0.996,2.33) [0.996,2.33) [2.33,3.67) [3.67,5) [3.67,5)
Levels: [0.996,2.33) [2.33,3.67) [3.67,5)
> y <- c(55, 66, 77, 88, 99, 100)
> cut(y, breaks = c(0, 60, 70, 80, 90, 100), right = FALSE, labels = c("F", "D", "C", "B", "A"))
[1] F D C B A <NA>
Levels: F D C B A
> cut(y, breaks = c(0, 60, 70, 80, 90, 100), include.lowest = TRUE, right = FALSE, labels = c("F", "D", "C", "B", "A"))
[1] F D C B A A
Levels: F D C B A