6.9 요인 변수의 할용 예

데이터가 요인으로 저장되면 plot()함수를 사용하여 각 요인 수준으로 표시되는 관측치 수를 한 눈에 볼 수 있습니다. memb_assoc데이터 프레임에서 열을 추출하여 요인으로 변환 한 다음 관개 협회의 회원이거나 아니었던 인터뷰 응답자의 수를 살펴 보겠습니다.

# 패키지 불러오기
# install.packages("tidyverse")
library(tidyverse)

# 데이터 불러오기
interviews <- read_csv("data/SAFI_clean.csv", na = "NULL")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   key_ID = col_double(),
##   village = col_character(),
##   interview_date = col_datetime(format = ""),
##   no_membrs = col_double(),
##   years_liv = col_double(),
##   respondent_wall_type = col_character(),
##   rooms = col_double(),
##   memb_assoc = col_character(),
##   affect_conflicts = col_character(),
##   liv_count = col_double(),
##   items_owned = col_character(),
##   no_meals = col_double(),
##   months_lack_food = col_character(),
##   instanceID = col_character()
## )
## interview 데이터 프레임의 memb_assoc 컬럼을 벡터로 만들기
memb_assoc <- interviews$memb_assoc

## 벡터를 요인으로 강제 변환합니다 : as.factor() 함수 이용
memb_assoc <- as.factor(memb_assoc)

## 요인 확인하기
memb_assoc
##   [1] <NA> yes  <NA> <NA> <NA> <NA> no   yes  no   no   <NA> yes  no   <NA> yes 
##  [16] <NA> <NA> <NA> <NA> <NA> no   <NA> <NA> no   no   no   <NA> no   yes  <NA>
##  [31] <NA> yes  no   yes  yes  yes  <NA> yes  <NA> yes  <NA> no   no   <NA> no  
##  [46] no   yes  <NA> <NA> yes  <NA> no   yes  no   <NA> yes  no   no   <NA> no  
##  [61] yes  <NA> <NA> <NA> no   yes  no   no   no   no   yes  <NA> no   yes  <NA>
##  [76] <NA> yes  no   no   yes  no   no   yes  no   yes  no   no   <NA> yes  yes 
##  [91] yes  yes  yes  no   no   no   no   yes  no   no   yes  yes  no   <NA> no  
## [106] no   <NA> no   no   <NA> no   <NA> <NA> no   no   no   no   yes  no   no  
## [121] no   no   no   no   no   no   no   no   no   yes  <NA>
## Levels: no yes
## 협회 회원 여부에 따른 응답자 수 막대 그래프
plot(memb_assoc)

벡터의 출력과 비교 한 플롯을 보면 “No”및 “Yes”외에도 협회의 회원인지 여부에 대한 정보가 없는 NA값을 갖는 일부 응답자가 있음을 알 수 있습니다. 이는 누락된 데이터 즉 결측치입니다. 이러한 결측치는 플롯에 나타나지 않습니다. 플롯에서 이러한 결측치를 처리하여 시각화에 반영할 수 있도록 다르게 코딩해 보겠습니다.

## interview 데이터 프레임의 memb_assoc 컬럼을 벡터로 만들기
memb_assoc <- interviews$memb_assoc

## 결측치를 "undetermined"로 대체합니다.
memb_assoc[is.na(memb_assoc)] <- "undetermined"    # is.na() 함수를 사용합니다.

## 벡터를 요인으로 변환시킵니다. : as.factor() 함수 이용. 수준도 순서를 정해줍니다.
memb_assoc <- as.factor(memb_assoc)

## 다시 요인의 값들을 확인합니다. 
memb_assoc                            #  NA가 모두 undertermined로 변경되었습니다.
##   [1] undetermined yes          undetermined undetermined undetermined
##   [6] undetermined no           yes          no           no          
##  [11] undetermined yes          no           undetermined yes         
##  [16] undetermined undetermined undetermined undetermined undetermined
##  [21] no           undetermined undetermined no           no          
##  [26] no           undetermined no           yes          undetermined
##  [31] undetermined yes          no           yes          yes         
##  [36] yes          undetermined yes          undetermined yes         
##  [41] undetermined no           no           undetermined no          
##  [46] no           yes          undetermined undetermined yes         
##  [51] undetermined no           yes          no           undetermined
##  [56] yes          no           no           undetermined no          
##  [61] yes          undetermined undetermined undetermined no          
##  [66] yes          no           no           no           no          
##  [71] yes          undetermined no           yes          undetermined
##  [76] undetermined yes          no           no           yes         
##  [81] no           no           yes          no           yes         
##  [86] no           no           undetermined yes          yes         
##  [91] yes          yes          yes          no           no          
##  [96] no           no           yes          no           no          
## [101] yes          yes          no           undetermined no          
## [106] no           undetermined no           no           undetermined
## [111] no           undetermined undetermined no           no          
## [116] no           no           yes          no           no          
## [121] no           no           no           no           no          
## [126] no           no           no           no           yes         
## [131] undetermined
## Levels: no undetermined yes
## 막대 그래프를 다시 그려 봅니다.
plot(memb_assoc)

막대 그래프를 보면 x 축이 벡터의 수준이고, y 축이 수준별 응답자 수임을 알 수 있습니다. 이제 x 축에 나타난 수준 값의 첫 글자를 모두 대문자로 바꾸고, 그 순서도 “Yes,” “No,” “Undetermined”의 순서로 출력하면 훨씬 막대 그래프가 보기 좋을 것 같습니다.

  • 수준의 첫 글자를 대문자로 변환시키기 위해 stringr 패키지의 str_to_title() 함수를 사용하면 됩니다. : str_to_title(levels())
  • 수준의 순서를 바꾸기 위해서는 factor() 함수를 이용하여 levels = 인수에 순서대로 문자형 벡터로 지정합니다 : factor( , levels = c())

이 내용들을 반영해서 코딩을 다시 해 보겠습니다.

## 패키지 불러오기 : stringr 패키지는 tidyverse 패키지에 포함되어 있습니다.
## interview 데이터 프레임의 memb_assoc 컬럼을 벡터로 만들기
memb_assoc <- interviews$memb_assoc

## 결측치를 "undetermined"로 대체합니다.
memb_assoc[is.na(memb_assoc)] <- "undetermined"            # is.na() 함수를 사용합니다.

## 벡터를 요인으로 변환시킵니다. : as.factor() 함수 이용. 수준도 순서를 정해줍니다.
memb_assoc <- factor(memb_assoc, levels = c("yes", "no", "undetermined"))
levels(memb_assoc) <- str_to_title(levels(memb_assoc))     # 수준의 첫글자를 대문자로 바꿔 줍니다.

## 다시 요인의 값들을 확인합니다. 
memb_assoc                            #  요인의 수준과 순서가 변경되었습니다.
##   [1] Undetermined Yes          Undetermined Undetermined Undetermined
##   [6] Undetermined No           Yes          No           No          
##  [11] Undetermined Yes          No           Undetermined Yes         
##  [16] Undetermined Undetermined Undetermined Undetermined Undetermined
##  [21] No           Undetermined Undetermined No           No          
##  [26] No           Undetermined No           Yes          Undetermined
##  [31] Undetermined Yes          No           Yes          Yes         
##  [36] Yes          Undetermined Yes          Undetermined Yes         
##  [41] Undetermined No           No           Undetermined No          
##  [46] No           Yes          Undetermined Undetermined Yes         
##  [51] Undetermined No           Yes          No           Undetermined
##  [56] Yes          No           No           Undetermined No          
##  [61] Yes          Undetermined Undetermined Undetermined No          
##  [66] Yes          No           No           No           No          
##  [71] Yes          Undetermined No           Yes          Undetermined
##  [76] Undetermined Yes          No           No           Yes         
##  [81] No           No           Yes          No           Yes         
##  [86] No           No           Undetermined Yes          Yes         
##  [91] Yes          Yes          Yes          No           No          
##  [96] No           No           Yes          No           No          
## [101] Yes          Yes          No           Undetermined No          
## [106] No           Undetermined No           No           Undetermined
## [111] No           Undetermined Undetermined No           No          
## [116] No           No           Yes          No           No          
## [121] No           No           No           No           No          
## [126] No           No           No           No           Yes         
## [131] Undetermined
## Levels: Yes No Undetermined
## 막대 그래프를 다시 그려 봅니다.
plot(memb_assoc)