Sostituisci NA con zero in R
- Sostituisci NA con zero in DataFrame R più grandi
- Sostituisci NA con zero in un sottoinsieme di DataFrame R
C’è un modo semplice per sostituire NA
con zeri in un DataFrame in R. Supponiamo di avere un DataFrame chiamato my_data
. Per sostituire tutti i valori NA
con zero in quel data frame, puoi eseguire questa istruzione.
my_data[is.na(my_data)] <- 0
Ad esempio, se my_data
ha il contenuto seguente.
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 NA 4 <NA> 7 10
5 1 2 ZC1 NA 2
Quando si esegue my_data[is.na(my_data)] <- 0
il contenuto del data frame cambia in questo.
C1 C2 C3 C4 C5
1 4 3 0 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 0 4 0 7 10
5 1 2 ZC1 0 2
Sostituisci NA con zero in DataFrame R più grandi
La soluzione precedente utilizza le riassegnazioni del sottoinsieme Base R, che funzionano bene quando si hanno DataFrame relativamente piccoli. Ma per set di dati più grandi, potresti aver bisogno di un’alternativa più veloce, come il nuovo approccio di valutazione ibrido implementato nelle versioni recenti del pacchetto dplyr
.
Il nuovo approccio impiegato dal pacchetto dplyr
riconosce intere espressioni e utilizza il codice C++ per valutarle. In questo modo, puoi ottenere trasformazioni fino al 30% più veloci durante l’elaborazione di frame di big data.
Per sostituire i valori NA
con zeri usando il pacchetto dplyr
, puoi usare la funzione mutate
con il verbo con scope _all
e la funzione replace
nel formato purrr
, come nell’esempio sotto.
my_data <- mutate_all(my_data, ~replace(., is.na(.), 0))
L’uso della notazione purrr
ci permette di applicare la funzione replace
ad ogni elemento del data frame.
Sostituisci NA con zero in un sottoinsieme di DataFrame R
Invece del verbo con scope _all
nella funzione mutate
, puoi usare il verbo con scope _at
per limitare l’azione di sostituzione a colonne specifiche. Per fare ciò, puoi includere un vettore con i nomi delle colonne in cui desideri applicare la sostituzione. Utilizzando il data frame precedente, se è necessario sostituire i valori NA
solo nelle colonne C1
e C4
, è possibile utilizzare il seguente comando:
my_data <- mutate_at(my_data, c("C1", "C4"), ~replace(., is.na(.), 0))
In questo modo, solo le NA nelle colonne C1
e C4
vengono sostituite da 0, risultando in un DataFrame come di seguito.
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 0 4 <NA> 7 10
5 1 2 ZC1 0 2
Nell’esempio precedente, potresti aver voluto sostituire NA
con zeri solo nelle colonne numeriche per evitare di includere valori zero nelle colonne alfanumeriche come C3
. Se è così, invece di specificare le colonne dove vuoi applicare la sostituzione, puoi usare la funzione mutate_if
con la condizione is.numeric
per dire a R di sostituire NA
con zeri solo nelle colonne numeriche. Nell’esempio seguente, puoi trovare il codice completo per provarlo, dall’installazione del pacchetto dplyr
e dal popolamento del data frame all’esecuzione delle sostituzioni e alla visualizzazione dei risultati.
install.packages("dplyr")
library(dplyr)
C1 <- c(4, 9, 1, NA, 1)
C2 <- c(3, 8, 1, 4, 2)
C3 <- c(NA, 'ABC', 'XYZ', NA, 'ZC1')
C4 <- c(3, 5, 3, 7, NA)
C5 <- c(7, 10, NA, 10, 2)
my_data <- data.frame(C1, C2, C3, C4, C5)
my_data <- mutate_if(my_data, is.numeric, ~replace(., is.na(.), 0))
my_data
Produzione:
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 0
4 0 4 <NA> 7 10
5 1 2 ZC1 0 2
Puoi trovare maggiori informazioni sulla funzione mutate()
e le sue varianti nella Documentazione R.