R programming #3 (미완)

데린이_욤·2020년 11월 13일
0

How to R

목록 보기
4/4
  1. 팩터
  • 팩터는 범주형(categorical data)를 표현하기 위한 데이터 구조
  • 범주형 데이터는 명목형 데이터(nominal data)와 순서형 데이터(ordinal data)로 구분
    • 명목형 데이터 : 성별, 인종, 종교, 직업, 국적, 정당, 출생지, 혈액형 등 순서에 대한 의미 없음
    • 순서형 데이터 : 직무 만족도, 정당 선호도, 교육 수준, 옷 사이즈 등 순서에 의미를 부여
  • 함수 : factor(x, levels, labels, ordered)
    인수 : x - 대상이 되는 데이터 / levels - 데이터 수준 지정, 기본값은 x에 대해 오름차순 정렬 / lables - levels에 지정된 수준에 이름 지정 / ordered - TRUE이면 levels의 순서를 지정, 기본값은 FALSE

3-1. factor()에 의한 명목형 데이터 생성

  • 팩터로 변환 전에 mode()를 통해 유형이 "character"임을 확인
  • factor() 함수를 이용하여 범주형 데이터로 변환 후 mode()는 "numeric"으로 변경, is.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"
  • 수치형 벡터를 팩터로 변경
    ex) 1과 2의 숫자로 구성된 gender 벡터가 있음. factor(gender)dml Levels는 기본값으로 알파벳 순서로 됨. levels 인수에 수준을 1과 2로 지정하고, labels 인수에는 "F"와 "M"으로 지정하여, 1은 "F", 2는 "M"으로 지정함.
  • is.factor()는 주어진 데이터가 팩터인지 판단
> 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() 함수를 이용하여 순서에 의미가 있는 범주형 데이터 생성

  • 10명의 소비자를 대상으로 입고 있는 옷의 사이즈를 조사한 데이터
  • factor() 함수의 인수를 지정하지 않을 때 Levels는 알파벳 순에 의해 순서에 의미가 없이 설정
  • as.numeric()을 통하여 각 인수를 숫자로 변경
  • 의미 있는 순서를로 만들기 위하여 인수 levels를 지정하면 됨
  • oreders = TRUE를 지정하면 레벨에 순서 설정됨
> 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
  • labels를 설정함으로 "S"는 "Small", "M"은 "Medium", "L"은 "Large"로 변경
> 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
  • factor(x)의 인수 x가 수치형일 때 순서형 팩터를 생성
> 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() 함수

  • cut(x, breaks)는 연속형 수치 벡터를 팩터로 변환시키는 함수
  • 함수 : cut(x, breaks, include.lowest, right, labels)
    인수 : x - 수치형 벡터 / breaks - 구간의 개수 또는 구간을 설정할 벡터를 지정 / include.lowest - right=FALSE인 경우 관측값이 구간의 최댓갑과 같은 경우 포함 여부를 지정. right=TRUE인 경우 관측값이 구간의 최솟갑과 같은 경우 포함 여부 지정 / right -기본값은 TRUE이며 구간에서 오른쪽이 닫히고, FLASE이면 왼쪽이 닫힘 / labels - 기본값은 (a,b]형식이며, FALSE인 경우 정수로 지정됨

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
profile
데이터 분석가가 되고싶은 데린이

0개의 댓글