[R] 데이터 프레임 값을 0 또는 1로 변환 (feat. tidyverse)

해당 포스트에서는 R에서 데이터 프레임 내부의 값을 범위 기준에 따라 0 또는 1로 변환하는 방법을 설명합니다.

1. INTRO

네이버 지식iN에서 지식을 공유하고 있습니다. 간단한 질문들은 해당 질문에 바로 답변을 드리지만 질문의 내용이 유익하거나 추가 설명이 필요한 경우에는 포스팅을 작성하여 공유드리고 있습니다.

2. 질문

R에서 데이터 수정해야되는데,

CSV 파일 불러왔거든요,

근데 그다음에 그 변수들 값이 리커트 척도라서 1~4까지 있는데,

1,2는 0으로, 3,4 값은 1로 변경해야되는데 어느 함수를 써야되나요????

컬럼이나 새로운 변수 생성하는건 알지만,

생성하는게 아니고 원래 있는 변수들의 값을

1~4까지 있는데, 0과1만 나오게 변경하려는거예요!

mutation같기는 한데 어떻게 써야할지 예시를 좀 들어주세요 ㅠ

3. 풀이

해당 문제를 풀기위해 아래 2가지 단계로 코드를 작성하였습니다.

  1. 샘플 데이터 생성
  2. dplyr 패키지와 ifelse() 함수를 이용한 데이터 변환

1. 샘플 데이터 생성

문제 풀이에 사용할 샘플 데이터를 생성하겠습니다.

library(tidyverse)

my_data <- tibble(
  a = c(1, 2, 4, 3, 2, 1),
  b = c(1, 1, 1, 1, 1, 1),
  c = c(2, 4, 2, 4, 2, 4),
  d = c(1, 1, 4, 4, 3, 3)
)
my_data
## # A tibble: 6 x 4
##         a     b     c     d
##        
##   1     1     1     2     1
##   2     2     1     4     1
##   3     4     1     2     4
##   4     3     1     4     4
##   5     2     1     2     3
##   6     1     1     4     3

2. dplyrifelse()를 이용한 데이터 변환

데이터의 분포는 1~4이며, 해당 값들 중 1과 2는 0으로 3과 4는 1로 변환하겠습니다.

  • 데이터 범위 : 1~4
  • 데이터 변환 : 1 or 2 -> 0, 3 or 4 -> 1
my_data %>% mutate(
  a = ifelse(a %in% c(1, 2), 0, 1),
  b = ifelse(b %in% c(1, 2), 0, 1),
  c = ifelse(c %in% c(1, 2), 0, 1),
  d = ifelse(d %in% c(1, 2), 0, 1)
)
## # A tibble: 6 x 4
##         a     b     c     d
##        
##   1     0     0     0     0
##   2     0     0     1     0
##   3     1     0     0     1
##   4     1     0     1     1
##   5     0     0     0     1
##   6     0     0     1     1


banner-request-analysis