Dplyr: как использовать mutate() с несколькими условиями


Вы можете использовать следующий базовый синтаксис в dplyr , чтобы использовать функцию mutate() для создания нового столбца на основе нескольких условий:

 library (dplyr)

df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

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

  • A_Хорошо , если команда равна А и количество очков больше или равно 20.
  • A_Bad, если команда равна А и набрано очков меньше 20.
  • B_Хорошо , если команда равна B и количество очков больше или равно 20.
  • B_Bad, если ни одно из предыдущих условий не выполнено.

В следующем примере показано, как использовать этот синтаксис на практике.

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

Пример: используйте mutate() в dplyr с несколькими условиями.

Предположим, у нас есть следующий кадр данных в R, содержащий информацию о различных баскетболистах:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'),
                 points=c(22, 30, 34, 19, 14, 12, 39, 15, 22, 25))

#view data frame
df

   team points
1 to 22
2 to 30
3 to 34
4 to 19
5 to 14
6 B 12
7 B 39
8 B 15
9 B 22
10 B 25

Мы можем использовать следующий синтаксис с функцией mutate() для создания нового столбца с именем class , значения которого основаны на значениях в столбцах команды и очков :

 library (dplyr)
#add new column based on values in team and points columns
df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

#view updated data frame
df

   team points class
1 A 22 A_Good
2 A 30 A_Good
3 A 34 A_Good
4 A 19 A_Bad
5 A 14 A_Bad
6 B 12 B_Bad
7 B 39 B_Good
8 B 15 B_Bad
9 B 22 B_Good
10 B 25 B_Good

  Столбец нового класса принимает значения на основе значений в столбцах команды и очков .

Например, первая строка имела значение A в столбце команды и значение очков , большее или равное 20, поэтому она получила значение A_Good в столбце нового класса .

Обратите внимание, что в этом примере мы использовали символ & в качестве оператора «И», чтобы проверить, являются ли оба условия истинными, прежде чем присваивать значение в столбце класса .

Однако мы могли бы использовать | символ в качестве оператора «ИЛИ», чтобы вместо этого проверить, выполнено ли какое-либо из двух условий, прежде чем присваивать значение в столбце класса .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в dplyr:

dplyr: как изменить переменную, если столбец содержит строку
dplyr: Как изменить уровни факторов с помощью mutate()
dplyr: Как использовать функциюthrough()

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *