Rilevamento e conteggio dei valori mancanti
Usi is.na(), anyNA() e sum(is.na()) per verificare i dati mancanti.
Rilevamento e conteggio dei valori mancanti è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.
is.na() — lo strumento principale per il rilevamento
is.na(x) verifica ogni elemento di x e restituisce un vettore logico della stessa lunghezza, con TRUE nei punti in cui il valore è NA (o NaN). È lo strumento fondamentale per rilevare i valori mancanti.
heights <- c(175, NA, 162, 188, NA, 170, NA, 165)
cat('Heights:', heights, '
')
cat('is.na() :', is.na(heights), '
')
cat('!is.na():', !is.na(heights), '
')Contare gli NA con sum(is.na())
Poiché nelle operazioni aritmetiche TRUE == 1 e FALSE == 0, sum(is.na(x)) conta il numero totale di valori mancanti. mean(is.na(x)) restituisce la proporzione di valori mancanti.
survey <- c(8, NA, 6, NA, 9, 7, NA, 5, NA, 8)
cat('Survey responses:', survey, '
')
cat('Total NAs: ', sum(is.na(survey)), '
')
cat('Total present:', sum(!is.na(survey)), '
')
cat('NA proportion:', mean(is.na(survey)), '
')
cat('NA percentage:', mean(is.na(survey)) * 100, '%
')anyNA() — verifica rapida della presenza
anyNA(x) restituisce un singolo TRUE se almeno un elemento è NA, altrimenti restituisce FALSE. È più veloce di any(is.na(x)) perché si interrompe al primo NA trovato.
complete_data <- c(1, 2, 3, 4, 5)
incomplete_data <- c(1, 2, NA, 4, 5)
cat('anyNA(complete) :', anyNA(complete_data), '
') # FALSE
cat('anyNA(incomplete):', anyNA(incomplete_data), '
') # TRUE
# Use in validation
if (anyNA(incomplete_data)) {
cat('Warning: data contains missing values!
')
}which(is.na()) — trovare le posizioni
which(is.na(x)) restituisce gli indici (le posizioni) dei valori mancanti in un vettore. È essenziale per verificare quali osservazioni sono mancanti e per applicare un'imputazione mirata.
temperatures <- c(22.1, NA, 19.8, NA, 25.1, NA, 17.3, 20.0)
cat('Temperatures:', temperatures, '
')
missing_pos <- which(is.na(temperatures))
cat('Missing at positions:', missing_pos, '
')
cat('Number missing:', length(missing_pos), '
')
# What values are NOT missing?
present_pos <- which(!is.na(temperatures))
cat('Present at positions:', present_pos, '
')Contare gli NA in un data frame
Per i data frame, is.na(df) restituisce una matrice logica delle stesse dimensioni. Usandola insieme a colSums() si ottiene il conteggio dei valori mancanti per colonna: un modo rapido per verificare la qualità dei dati.
# Simulate a small data frame
name_col <- c('Alice', 'Bob', 'Carol', 'Dave', 'Eve')
age_col <- c(28, NA, 32, NA, 29)
sal_col <- c(55000, 72000, NA, 90000, 61000)
scr_col <- c(88, NA, 75, NA, NA)
cat('Age NAs: ', sum(is.na(age_col)), '
')
cat('Salary NAs:', sum(is.na(sal_col)), '
')
cat('Score NAs: ', sum(is.na(scr_col)), '
')Schema colSums(is.na(df))
Lo schema colSums(is.na(df)) è il modo più rapido per contare i valori mancanti per colonna in un data frame. Restituisce un vettore numerico con nomi, che mostra quanti NA sono presenti in ciascuna colonna.
# Build a data frame manually
df <- data.frame(
name = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
age = c(28, NA, 32, NA, 29),
salary = c(55000, 72000, NA, 90000, 61000),
score = c(88, NA, 75, NA, NA)
)
cat('Missing values per column:
')
print(colSums(is.na(df)))
cat('Total missing:', sum(is.na(df)), '
')Proporzione di NA per colonna
Dividendo per il numero di righe si ottiene la proporzione di valori mancanti per colonna. È più informativa dei conteggi assoluti quando le colonne hanno lunghezze diverse.
df <- data.frame(
x1 = c(1, NA, 3, NA, 5),
x2 = c(NA, 2, NA, 4, NA),
x3 = c(1, 2, 3, NA, 5)
)
n_rows <- nrow(df)
na_counts <- colSums(is.na(df))
na_pct <- round(na_counts / n_rows * 100, 1)
cat('NA counts: '); print(na_counts)
cat('NA percentage: '); print(na_pct)table(is.na()) — conteggio delle frequenze
table(is.na(x)) produce una tabella delle frequenze con nomi, che mostra quanti valori FALSE (presenti) e TRUE (mancanti) sono presenti. È facile da leggere a colpo d'occhio.
responses <- c(5, NA, 8, 6, NA, 9, 7, NA, NA, 8)
cat('NA frequency table:
')
print(table(is.na(responses)))
# For multiple columns:
cat('Age table:
')
ages <- c(28, NA, 32, NA, 29)
print(table(is.na(ages)))Trovare le righe con almeno un NA
Per individuare quali righe di un data frame contengono almeno un valore mancante, utilizzi apply(is.na(df), 1, any). Il risultato è un vettore logico con TRUE per le righe incomplete.
df <- data.frame(
id = 1:5,
age = c(28, NA, 32, NA, 29),
salary = c(55000, 72000, NA, 90000, 61000)
)
# Which rows have at least one NA?
has_na <- apply(is.na(df), 1, any)
cat('Rows with any NA:', which(has_na), '
')
cat('Complete rows: ', which(!has_na), '
')
cat('Complete row count:', sum(!has_na), '/', nrow(df), '
')Verificare un dataset completo
Un flusso di lavoro pratico per la verifica degli NA consiste nel contare, individuare e segnalare i valori mancanti, così da comprendere la qualità dei dati prima dell'analisi. Ecco una funzione di verifica autonoma.
audit_na <- function(v, label) {
n_total <- length(v)
n_missing <- sum(is.na(v))
pct <- round(n_missing / n_total * 100, 1)
positions <- which(is.na(v))
cat(label, ':', n_missing, '/', n_total,
'(', pct, '%) NA at positions', positions, '
')
}
heights <- c(175, NA, 162, 188, NA, 170)
weights <- c(70, 85, NA, 92, 68, NA)
audit_na(heights, 'Height')
audit_na(weights, 'Weight')Riepilogo del rilevamento degli NA
Riferimento rapido agli strumenti per rilevare gli NA:
is.na(x)— vettore logico: TRUE dove è presente NAanyNA(x)— singolo TRUE/FALSE: è presente qualche NA?sum(is.na(x))— conteggio degli NAmean(is.na(x))— proporzione degli NAwhich(is.na(x))— posizioni degli NAcolSums(is.na(df))— conteggio degli NA per colonnatable(is.na(x))— tabella delle frequenze di valori NA e non NA
x <- c(10, NA, 30, NA, 50, NA, 70)
cat('is.na: ', is.na(x), '
')
cat('anyNA: ', anyNA(x), '
')
cat('sum(is.na): ', sum(is.na(x)), '
')
cat('mean(is.na): ', mean(is.na(x)), '
')
cat('which(is.na):', which(is.na(x)), '
')Verifica rapida
Che cosa restituisce sum(is.na(c(1, NA, 3, NA, 5)))?
Riepilogo: rilevare e contare gli NA
Ben fatto! Ecco i concetti principali di questa lezione:
is.na(x)è lo strumento principale e restituisce un vettore logicosum(is.na(x))conta i valori mancanti;mean(is.na(x))ne restituisce la proporzioneanyNA(x)è un controllo rapido per verificare la presenza di almeno un NAwhich(is.na(x))mostra le posizioni esatte degli NAcolSums(is.na(df))è il metodo standard per verificare un data frame- Non utilizzi mai
x == NAper rilevare gli NA: utilizzi sempreis.na(x)
# Full audit of a data frame in 3 lines
df <- data.frame(a=c(1,NA,3), b=c(NA,2,NA), c=c(1,2,3))
cat('Per column:', colSums(is.na(df)), '
')
cat('Total: ', sum(is.na(df)), '/', nrow(df)*ncol(df), '
')
cat('Complete rows:', sum(complete.cases(df)), '/', nrow(df), '
')Domande Frequenti
La lezione «Rilevamento e conteggio dei valori mancanti» è gratuita?
Sì — il testo completo di «Rilevamento e conteggio dei valori mancanti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.
Cosa imparerò in «Rilevamento e conteggio dei valori mancanti»?
Usi is.na(), anyNA() e sum(is.na()) per verificare i dati mancanti. Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare R Academy?
Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Rilevamento e conteggio dei valori mancanti»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione R Academy?
Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Comprendere NA in R
- Rilevamento e conteggio dei valori mancanti
- Rimozione e sostituzione dei valori NA
- NA nei calcoli e nelle aggregazioni