Как применить функцию к каждой строке с помощью dplyr


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

df %>%
 rowwise() %>% 
 mutate(mean_value = mean(c(col1, col2, col3), na. rm = TRUE ))

В этом конкретном примере вычисляется среднее значение col1 , col2 и col3 для каждой строки во фрейме данных, но вы можете заменить функцию mean() любой функцией, для которой вы хотите вычислить другую метрику.

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

#create data frame
df <- data.frame(game1=c(22, 25, 29, 13, 22, 30),
 game2=c(12, 10, 6, 6, 8, 11),
 game3=c(NA, 15, 15, 18, 22, 13))

#view data frame
df

 game1 game2 game3
1 22 12 NA
2 25 10 15
3 29 6 15
4 13 6 18
5 22 8 22
6 30 11 13

Пример 1: Среднее значение конкретных столбцов в каждой строке

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

library(dplyr)

#calculate mean of game1 and game3
df %>%
 rowwise() %>% 
 mutate(mean_points = mean(c(game1, game3), na. rm = TRUE ))

# A tibble: 6 x 4
# Rowwise: 
 game1 game2 game3 mean_points

1 22 12 NA 22 
2 25 10 15 20 
3 29 6 15 22 
4 13 6 18 15.5
5 22 8 22 22 
6 30 11 13 21.5

Из вывода мы видим:

  • Среднее значение game1 и game3 в первой строке равно 22 .
  • Среднее значение game1 и game3 во второй строке равно 20 .
  • Среднее значение game1 и game3 в третьей строке равно 22 .

И так далее.

Пример 2: максимальное количество определенных столбцов в каждой строке

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

library(dplyr)

#calculate max of game2 and game3
df %>%
 rowwise() %>% 
 mutate(max_points = max(c(game2, game3), na. rm = TRUE ))

# A tibble: 6 x 4
# Rowwise: 
 game1 game2 game3 max_points

1 22 12 NA 12
2 25 10 15 15
3 29 6 15 15
4 13 6 18 18
5 22 8 22 22
6 30 11 13 13

Из вывода мы видим:

  • Максимальное значение game2 и game3 в первой строке равно 12 .
  • Максимальное значение game2 и game3 во второй строке равно 15 .
  • Максимальное значение game2 и game3 в третьей строке равно 15 .

И так далее.

Пример 3: Стандартное отклонение определенных столбцов в каждой строке

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

library(dplyr)

#calculate standard deviation of game2 and game3
df %>%
 rowwise() %>% 
 mutate(sd_points = sd(c(game2, game3), na. rm = TRUE ))

# A tibble: 6 x 4
# Rowwise: 
 game1 game2 game3 sd_points

1 22 12 NA NA 
2 25 10 15 3.54
3 29 6 15 6.36
4 13 6 18 8.49
5 22 8 22 9.90
6 30 11 13 1.41

Из вывода мы видим:

  • Стандартное отклонение game2 и game3 в первой строке равно NA (поскольку стандартное отклонение не может быть рассчитано только по одному значению).
  • Стандартное отклонение game2 и game3 во второй строке равно 3,54 .
  • Стандартное отклонение game2 и game3 в первой строке 6.36 .

И так далее.

Примечание.Полную документацию по функции rowwise() в dplyr можно найти здесь .

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

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

Как подсчитать различные значения с помощью dplyr
Как суммировать несколько столбцов с помощью dplyr
Как заменить несколько значений во фрейме данных с помощью dplyr

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.