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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *