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()