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_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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *