Dplyr에서 case_when()을 사용하는 방법


R의 dplyr 패키지에 있는 case_when() 함수를 사용하면 기존 변수에서 새 변수를 만들 수 있습니다.

이 함수는 다음 기본 구문을 사용합니다.

 library (dplyr)

df %>%
  mutate (new_var = case_when (var1 < 15 ~ ' low ',
                             var2 < 25 ~ ' med ',
                             TRUE ~ ' high '))

TRUE 는 “else” 문과 동일합니다.

다음 예에서는 다음 데이터 프레임에서 실제로 이 함수를 사용하는 방법을 보여줍니다.

 #create data frame
df <- data. frame (player = c('AJ', 'Bob', 'Chad', 'Dan', 'Eric', 'Frank'),
                 position = c('G', 'F', 'F', 'G', 'C', NA),
                 points = c(12, 15, 19, 22, 32, NA),
                 assists = c(5, 7, 7, 12, 11, NA))

#view data frame
df

  player position points assists
1 AJ G 12 5
2 Bob F 15 7
3 Chad F 19 7
4 Dan G 22 12
5 Eric C 32 11
6 Frank NA NA NA

예시 1: 기존 변수에서 새 변수 만들기

다음 코드는 포인트 열에서 값이 파생되는 quality 라는 새 변수를 만드는 방법을 보여줍니다.

 df %>%
mutate (quality = case_when (points > 20 ~ ' high ',
                             points > 15 ~ ' med ',
                             TRUE ~ ' low ' ))

  player position points assists quality
1 AJ G 12 5 low
2 Bob F 15 7 low
3 Chad F 19 7 med
4 Dan G 22 12 high
5 Eric C 32 11 high
6 Frank NA NA NA low

Case_when() 함수가 새 열의 값을 생성한 방법은 다음과 같습니다.

  • 포인트 열의 값이 20보다 크면 품질 열의 값이 “높음”입니다.
  • 그렇지 않고 포인트 열의 값이 15보다 크면 품질 열의 값은 “med”입니다.
  • 그렇지 않고 포인트 열의 값이 15(또는 NA와 같은 누락된 값)보다 작거나 같으면 품질 열의 값은 “낮음”입니다.

예 2: 여러 변수에서 새 변수 만들기

다음 코드는 포인트지원 열에서 값이 파생되는 quality 라는 새 변수를 만드는 방법을 보여줍니다.

 df %>%
mutate (quality = case_when (points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA average

is.na() 함수를 사용하여 문자열을 NA 값에 명시적으로 할당할 수도 있습니다.

 df %>%
mutate (quality = case_when (is. na (points) ~ ' missing ',
                             points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA missing

추가 리소스

R에서 줄을 정렬하는 방법
R에서 그룹당 관측치를 계산하는 방법
R에서 특정 문자열이 포함된 행을 필터링하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다