Как применить функцию к каждой строке с помощью 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