Как использовать 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