0Pricing
R Academy · Lezione

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 NA
  • anyNA(x) — singolo TRUE/FALSE: è presente qualche NA?
  • sum(is.na(x)) — conteggio degli NA
  • mean(is.na(x)) — proporzione degli NA
  • which(is.na(x)) — posizioni degli NA
  • colSums(is.na(df)) — conteggio degli NA per colonna
  • table(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 logico
  • sum(is.na(x)) conta i valori mancanti; mean(is.na(x)) ne restituisce la proporzione
  • anyNA(x) è un controllo rapido per verificare la presenza di almeno un NA
  • which(is.na(x)) mostra le posizioni esatte degli NA
  • colSums(is.na(df)) è il metodo standard per verificare un data frame
  • Non utilizzi mai x == NA per rilevare gli NA: utilizzi sempre is.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

  1. Comprendere NA in R
  2. Rilevamento e conteggio dei valori mancanti
  3. Rimozione e sostituzione dei valori NA
  4. NA nei calcoli e nelle aggregazioni
← Torna a R Academy