Come applicare una funzione a ciascuna riga utilizzando dplyr


È possibile utilizzare la seguente sintassi di base per applicare una funzione a ciascuna riga di un frame di dati in R utilizzando le funzioni dplyr:

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

Questo particolare esempio calcola il valore medio di col1 , col2 e col3 per ogni riga nel frame di dati, ma puoi sostituire la funzione Mean() con qualsiasi funzione per la quale desideri calcolare una metrica diversa.

I seguenti esempi mostrano come utilizzare in pratica questa sintassi con il seguente frame di dati che contiene informazioni sui punti segnati da diversi giocatori di basket in diverse partite:

 #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

Esempio 1: media di colonne specifiche in ciascuna riga

Il codice seguente mostra come calcolare il valore medio delle colonne game1 e game3 per ogni riga nel frame di dati:

 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

Dal risultato possiamo vedere:

  • Il valore medio di game1 e game3 nella prima riga è 22 .
  • Il valore medio di game1 e game3 nella seconda riga è 20 .
  • Il valore medio di game1 e game3 nella terza riga è 22 .

E così via.

Esempio 2: numero massimo di colonne specifiche in ogni riga

Il codice seguente mostra come calcolare il valore massimo delle colonne game2 e game3 per ogni riga nel frame di dati:

 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

Dal risultato possiamo vedere:

  • Il valore massimo di game2 e game3 nella prima riga è 12 .
  • Il valore massimo di game2 e game3 nella seconda riga è 15 .
  • Il valore massimo di game2 e game3 nella terza riga è 15 .

E così via.

Esempio 3: deviazione standard di colonne specifiche in ciascuna riga

Il codice seguente mostra come calcolare la deviazione standard dei valori nelle colonne game2 e game3 per ogni riga nel data frame:

 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

Dal risultato possiamo vedere:

  • La deviazione standard di gioco2 e gioco3 nella prima riga è NA (poiché la deviazione standard non può essere calcolata da un singolo valore).
  • La deviazione standard di game2 e game3 nella seconda riga è 3,54 .
  • La deviazione standard di game2 e game3 nella prima riga 6.36 .

E così via.

Nota : puoi trovare la documentazione completa della funzione rowwise() in dplyr qui .

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni utilizzando dplyr:

Come contare valori distinti usando dplyr
Come sommare su più colonne utilizzando dplyr
Come sostituire più valori in un frame di dati utilizzando dplyr

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *