Como aplicar uma função a cada linha usando dplyr


Você pode usar a seguinte sintaxe básica para aplicar uma função a cada linha de um quadro de dados em R usando funções dplyr:

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

Este exemplo específico calcula o valor médio de col1 , col2 e col3 para cada linha no quadro de dados, mas você pode substituir a função Mean() por qualquer função para a qual deseja calcular uma métrica diferente.

Os exemplos a seguir mostram como usar essa sintaxe na prática com o seguinte quadro de dados que contém informações sobre pontos marcados por diferentes jogadores de basquete em diferentes jogos:

 #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

Exemplo 1: Média de colunas específicas em cada linha

O código a seguir mostra como calcular o valor médio das colunas game1 e game3 para cada linha no quadro de dados:

 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

Pelo resultado podemos ver:

  • O valor médio de game1 e game3 na primeira linha é 22 .
  • O valor médio de game1 e game3 na segunda linha é 20 .
  • O valor médio de game1 e game3 na terceira linha é 22 .

E assim por diante.

Exemplo 2: Número máximo de colunas específicas em cada linha

O código a seguir mostra como calcular o valor máximo das colunas game2 e game3 para cada linha no quadro de dados:

 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

Pelo resultado podemos ver:

  • O valor máximo de game2 e game3 na primeira linha é 12 .
  • O valor máximo de game2 e game3 na segunda linha é 15 .
  • O valor máximo de game2 e game3 na terceira linha é 15 .

E assim por diante.

Exemplo 3: Desvio padrão de colunas específicas em cada linha

O código a seguir mostra como calcular o desvio padrão dos valores nas colunas game2 e game3 para cada linha do quadro de dados:

 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

Pelo resultado podemos ver:

  • O desvio padrão do jogo2 e do jogo3 na primeira linha é NA (uma vez que o desvio padrão não pode ser calculado a partir de um único valor).
  • O desvio padrão de game2 e game3 na segunda linha é 3,54 .
  • O desvio padrão de game2 e game3 na primeira linha 6,36 .

E assim por diante.

Nota : Você pode encontrar a documentação completa da função rowwise() em dplyr aqui .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns usando dplyr:

Como contar valores distintos usando dplyr
Como somar várias colunas usando dplyr
Como substituir vários valores em um quadro de dados usando dplyr

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *