R: dplyr

# package per leggere, filtrare, manipolare tabelle in modo più semplice e veloce che con R base.
install.packages('dplyr')
library(dplyr)
# Utile ricaricare tabella in "formato dplyr"
tabella <- tbl_df(tabella_originale)
# visualizzando la tabella nella console con tabella vedo tipo di dataset, dimensione, poi prime 10 righe e tipo delle colonne. In particolare 5 funzioni fondamentali per leggere una tabella:
# select(), filter(), arrange(), mutate() e summarize()

# select() seleziona solo le colonne che ci interessano,
select(tabella, col_1, col_5, col_4, col_20)
# Per avere tutte le colonne tra col_1 e  col_5, più col_20:
select(tabella, col_1:col_5, col_20)
# Per escludere determinate colonne:
select(tabella, -col_5)
select(tabella, -(col_1:col_5))

# filter() filtra i record per una o più colonne:
filter(tabella, col_1 == "valore")
filter(tabella, col_1 == "valore", col_5 < "3.0", col_3 != "y")
# Separare i criteri con la virgola equivale a un AND, con | usiamo l'OR:
filter(tabella, col_1 == "valore" | col_5 < "3.0")
# Utile per filtrare i missing values:
filter(tabella, !is.na(col_1))

arrange() per ordinare:
arrange(tabella, col_5, col_1)
# per ordinamento decrescente aggiungere desc:
arrange(tabella, desc(col_5), col_1)

# mutate() per creare una nuova variabile sulla base dei valori di variabili presenti:
mutate(tabella, col_21 = (col_5*col_20)+2)

# summarize() per sintetizzare il dataset:
summarize(tabella, avg_1 = mean(col_1))
# Utile se raggruppiamo la tabella in base al valore di una variabile con la funzione group_by().
# Media di una o più colonne per ogni valore della colonna raggruppata:
summarize(group_by(tabella, col_1), mean(col_2)) 
# Oltre a mean(), possibile sintetizzare le variabili con, n() (numero osservazioni, non servono argomenti),
# n_distinct() (osservazioni diverse), max() o min(), sd() (deviazione standard).
summarize(group_by(tabella, col_1), mean(col_2), n(), n_distinct(col_2), max(col_2), min(col_2), sd(col_2))

# Concatenare arrange(), filter() e summarize() per velocizzare. Es. per mostrare, per ogni valore di col_1 dove col_5 è minore di 3, il conteggio e la media di col_2 ordinate in ordine decrescente per la media di col_2.
arrange(filter(summarize(group_by(tabella, col_1), numero = n(), media = mean(col_2)), col_5 < "3.0"), desc(media))
# Lo stesso risultato lo si può ottenere in modo molto più clean con l'operatore %>%, per non annidare le funzioni:
tabella %>% group_by(col_1) %>% summarize(numero = n(), media = mean(col_2)) %>% filter(col_5 < "3.0") %>% arrange(desc(media))

# Semplice anche fare le join, la sintassi è uguale per tutti i tipi di join:
inner_join(tabella1, tabella2, by=c("CampoTab1"="CampoTab2"))
# Se il campo di join ha lo stesso nome è sufficiente by="campo", se c'è solo un campo con lo stesso nome ed è quello con cui fare la join si può omettere il parametro.
# inner_join() classica per prendere solo i record con corrispondenza, left_join() e right_join() per prendere tutti i record di una o dell'altra tabella, full_join() per tutti i record di entrambe le tabelle.
# semi_join() prende solo i campi della prima tabella, rimuovendo i record duplicati.
# anti_join() prende invece tutti i record della prima tabella che non hanno corrispondenza nella seconda.

# top_n per prendere i primi valori ordinati
top_n(tabella, 10,  colonna)
# Prende i primi 10 valori di "tabella" ordinati per "colonna" (dal valore maggiore)



No comments:

Post a Comment