Функцию 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