Как использовать case_when() в dplyr


Функцию case_when() из пакета dplyr в R можно использовать для создания новых переменных из существующих переменных.

Эта функция использует следующий базовый синтаксис:

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: создание новой переменной из одной существующей переменной

В следующем коде показано, как создать новую переменную с именем качество , значения которой получаются из столбца баллов :

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, то значение в столбце качества будет «средним».
  • В противном случае, если значение в столбце баллов меньше или равно 15 (или отсутствует значение, такое как NA), то значение в столбце качества является «низким».

Пример 2: создание новой переменной из нескольких переменных

В следующем коде показано, как создать новую переменную с именем качество , значения которой получаются как из столбцов очков , так и из столбцов помощи :

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.