R - 요인: 초보자 가이드
안녕하세요, R 프로그래밍에 도전하는 여러분! 오늘 우리는 R의 요인(factor)에 대해 흥미로운 세계로 뛰어들어 보겠습니다. 코드를 작성한 적이 없어도 걱정 마세요 - 이 여정에서 여러분의 친절한 안내자가 되어드리겠습니다. 끝나면 요인(factor)을 마스터하신 것을 발견할 것입니다!
요인이란?
코드로 뛰어들기 전에 요인이 무엇인지 이해해 보겠습니다. R에서 요인은 범주형 데이터를 나타내기 위해 사용됩니다. 이를 통해 데이터의 다양한 그룹이나 범주를 레이블링하고 정리할 수 있습니다.
예를 들어, 동기들의 좋아하는 아이스크림 맛에 대한 데이터를 수집하는 경우, 요인을 사용하여 다양한 맛을 나타낼 수 있습니다: 초콜릿, 바닐라, 딸기 등. 각 맛은 요인의 "레벨(level)"이 됩니다.
이제 R에서 요인을 만들고 사용하는 방법을 보겠습니다!
예제: 첫 번째 요인 만들기
간단한 예제로 시작해 보겠습니다. 사람들의 좋아하는 애완동물에 대한 설문조사를 진행 중이라고 가정해 봅시다.
# 애완동물 선호도 벡터 생성
pets <- c("Dog", "Cat", "Dog", "Fish", "Cat", "Dog", "Hamster")
# 벡터를 요인으로 변환
pet_factor <- factor(pets)
# 요인을 출력
print(pet_factor)
# 요인의 요약 정보 얻기
summary(pet_factor)
이 코드를 실행하면 다음과 같은 출력을 보게 됩니다:
[1] Dog Cat Dog Fish Cat Dog Hamster
Levels: Cat Dog Fish Hamster
Cat Dog Fish Hamster
2 3 1 1
이를 해석해 보겠습니다:
- 먼저, 다양한 애완동물 선호도를 포함한 벡터
pets
를 생성했습니다. - 그런 다음,
factor()
함수를 사용하여 이 벡터를 요인으로 변환했습니다. - 요인을 출력할 때, R은 값을과 레벨(고유한 범주)을 보여줍니다.
-
summary()
함수는 요인의 각 레벨이 몇 번 등장하는지 세어줍니다.
R이 자동으로 고유한 범주를 식별하고 그 수를 세어주는 것을 보니 정말 마음에 드는 일이 아닐 수 없습니다. 이는 범주형 데이터에 요인을 사용하는 이유입니다!
데이터 프레임 내의 요인
이제 요인이 데이터 프레임 내에서 어떻게 작동하는지 보겠습니다. 데이터 프레임은 R에서 데이터를 저장하는 일반적인 구조입니다.
# 애완동물 선호도와 나이를 포함한 데이터 프레임 생성
pet_data <- data.frame(
name = c("Alice", "Bob", "Charlie", "David", "Eve"),
pet = c("Dog", "Cat", "Dog", "Fish", "Cat"),
age = c(25, 30, 35, 28, 22)
)
# 'pet' 열을 요인으로 변환
pet_data$pet <- factor(pet_data$pet)
# 데이터 프레임의 구조 출력
str(pet_data)
# 데이터 프레임의 요약 정보 얻기
summary(pet_data)
이 코드를 실행하면 다음과 같은 출력을 얻습니다:
'data.frame': 5 obs. of 3 variables:
$ name: chr "Alice" "Bob" "Charlie" "David" ...
$ pet : Factor w/ 3 levels "Cat","Dog","Fish": 2 1 2 3 1
$ age : num 25 30 35 28 22
name pet age
Length:5 Cat :2 Min. :22.00
Class :character Dog :2 1st Qu.:25.00
Mode :character Fish :1 Median :28.00
Mean :28.00
3rd Qu.:30.00
Max. :35.00
이를 해석해 보겠습니다:
- 이름, 애완동물 선호도, 나이를 포함한 데이터 프레임을 생성했습니다.
- 'pet' 열을 요인으로 변환했습니다.
-
str()
함수는 데이터 프레임의 구조를 보여줍니다. 'pet'이 이제 요인으로 되어 있다는 점을 주목하세요. -
summary()
함수는 각 열에 대한 요약 정보를 제공합니다. 요인 열의 경우 각 애완동물 유형의 수를 세어줍니다.
레벨의 순서 변경
occasionally, you might want to change the order of levels in your factor. Let's see how we can do that:
# 셔츠 사이즈의 요인 생성
sizes <- factor(c("Small", "Medium", "Large", "Small", "Medium"))
# 현재 레벨 출력
print(levels(sizes))
# 레벨의 순서 변경
sizes <- factor(sizes, levels = c("Small", "Medium", "Large"))
# 새로운 레벨 출력
print(levels(sizes))
이를 출력하면 다음과 같습니다:
[1] "Large" "Medium" "Small"
[1] "Small" "Medium" "Large"
이를 해석해 보겠습니다:
- 셔츠 사이즈의 요인을 생성했습니다.
- 초반에는 R이 알파벳 순서로 레벨을 정렬합니다.
-
levels
인수를 사용하여factor()
함수로 원하는 순서를 지정했습니다. - 이제 레벨이 우리가 지정한 순서로 변경되었습니다.
이는 플롯이나 테이블을 생성할 때 범주가 나타나는 순서를 제어하는 데 특히 유용합니다.
요인 레벨 생성
occasionally, you might want to generate factor levels programmatically. Here's how you can do that:
# 월의序列 생성
months <- factor(month.abb)
# 레벨 출력
print(levels(months))
# 커스텀 레벨을 가진 요인 생성
temperatures <- factor(c("Cold", "Hot", "Mild", "Hot", "Cold"),
levels = c("Cold", "Mild", "Hot"),
ordered = TRUE)
# 요인 출력
print(temperatures)
이를 출력하면 다음과 같습니다:
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
[1] Cold Hot Mild Hot Cold
Levels: Cold < Mild < Hot
이를 해석해 보겠습니다:
-
month.abb
라는 내장된 R 상수를 사용하여 월 약자의 요인을 생성했습니다. - 커스텀 레벨을 가진 온도 요인을 생성했습니다.
- 원하는 레벨과 그 순서를 지정했습니다.
-
ordered = TRUE
로 설정하여 순서가 있는 요인을 생성했습니다.
유용한 요인 메서드
다음은 요인을 처리하는 데 유용한 메서드 표입니다:
메서드 | 설명 |
---|---|
levels() |
요인의 레벨을 가져오거나 설정합니다 |
nlevels() |
요인의 레벨 수를 가져옵니다 |
as.numeric() |
요인을 숫자로 변환합니다 (레벨 순서 기반) |
as.character() |
요인을 문자로 변환합니다 |
table() |
요인의 빈도 표를 생성합니다 |
droplevels() |
사용되지 않은 레벨을 요인에서 제거합니다 |
기억하시기 바랍니다, 연습이 완벽을 이루는 열쇠입니다! 자신만의 요인을 만들고 이 메서드들을 실험해 보세요. 깜짝 놀라게 될 것입니다. 요인을 처리하는 데 능숙해지면 데이터 분석의 여정이 훨씬 더 원활해질 것입니다. 행복하게 코딩하세요!
Credits: Image by storyset