Dplyr: как изменить переменную, если столбец содержит строку
Вы можете использовать следующий базовый синтаксис в dplyr для изменения переменной, если столбец содержит определенную строку:
library (dplyr) df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector ))
Этот конкретный синтаксис применяет функцию Scale() к каждой переменной во фрейме данных, которая содержит строку «starter» в имени столбца.
В следующем примере показано, как использовать этот синтаксис на практике.
Пример: изменить переменную, если столбец содержит строку
Предположим, у нас есть следующий кадр данных в R:
#create data frame df <- data. frame (team=c('A', 'B', 'C', 'D', 'E', 'F'), starter_points=c(22, 26, 25, 13, 15, 22), starter_assists=c(4, 5, 10, 14, 12, 10), bench_points=c(7, 7, 9, 14, 13, 10), bench_assists=c(2, 5, 5, 4, 9, 14)) #view data frame df team starter_points starter_assists bench_points bench_assists 1 to 22 4 7 2 2 B 26 5 7 5 3 C 25 10 9 5 4 D 13 14 14 4 5 E 15 12 13 9 6 F 22 10 10 14
Мы можем использовать следующий синтаксис, чтобы применить функцию Scale() к каждой переменной во фрейме данных, которая содержит строку «starter» в имени столбца.
library (dplyr) #apply scale() function to each variable that contains 'starter' in the name df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector )) team starter_points starter_assists bench_points bench_assists 1 A 0.2819668 -1.3180158 7 2 2 B 1.0338784 -1.0629159 7 5 3 C 0.8459005 0.2125832 9 5 4 D -1.4098342 1.2329825 14 4 5 E -1.0338784 0.7227828 13 9 6 F 0.2819668 0.2125832 10 14
Используя этот синтаксис, мы смогли применить функцию Scale() для масштабирования каждого столбца, содержащего слово «starter», так что их значения теперь имеют среднее значение 0 и стандартное отклонение 1.
Обратите внимание, что следующие столбцы были изменены:
- starter_points
- starter_assists
Все остальные столбцы остались без изменений.
Также обратите внимание, что мы можем применить любую функцию, используя этот синтаксис.
В предыдущем примере мы выбрали масштабирование каждого столбца со строкой «starter» в имени.
Однако мы могли бы сделать что-то проще, например умножить значения на два для каждого столбца со словом «starter» в названии:
library (dplyr) #multiply values by two for each variable that contains 'starter' in the name df %>% mutate_at(vars(contains(' starter ')), ~ (. * 2 )) team starter_points starter_assists bench_points bench_assists 1 A 44 8 7 2 2 B 52 10 7 5 3 C 50 20 9 5 4 D 26 28 14 4 5 E 30 24 13 9 6 F 44 20 10 14
Обратите внимание, что значения столбцов starter_points и starter_assists были умножены на два, а все остальные столбцы остались неизменными.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в dplyr:
Как удалить строки с помощью dplyr
Как выбрать столбцы по индексу с помощью dplyr
Как фильтровать строки, содержащие определенную строку, с помощью dplyr