R Academy · Lektion

Registrering og optælling af manglende værdier

Brug is.na(), anyNA() og sum(is.na()) til at gennemgå manglende data.

Lektion 2 af 413 trin

Registrering og optælling af manglende værdier er en gratis R Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i R Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. R Academy-kurset indeholder 4 lektioner i alt.

is.na() — Det centrale værktøj til registrering

is.na(x) tester hvert element i x og returnerer en logisk vektor med samme længde, med TRUE dér, hvor værdien er NA (eller NaN). Dette er det grundlæggende værktøj til at registrere manglende værdier.

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), '
')

Tæl NA-værdier med sum(is.na())

Fordi TRUE == 1 og FALSE == 0 i aritmetik tæller sum(is.na(x)) det samlede antal manglende værdier. mean(is.na(x)) giver andelen af manglende værdier.

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() — Hurtigt tjek af tilstedeværelse

anyNA(x) returnerer en enkelt TRUE, hvis et element er NA, og ellers FALSE. Den er hurtigere end any(is.na(x)), fordi den stopper ved den første fundne NA.

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()) — Find positioner

which(is.na(x)) returnerer indeksene (positionerne) for manglende værdier i en vektor. Det er afgørende, når du skal kontrollere, hvilke observationer der mangler, og foretage målrettet imputering.

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, '
')

Tæl NA-værdier i en data frame

For data frames returnerer is.na(df) en logisk matrix med de samme dimensioner. Når du kombinerer den med colSums(), får du antallet af manglende værdier pr. kolonne — en hurtig måde at kontrollere datakvaliteten på.

# 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)), '
')

Mønsteret colSums(is.na(df))

Mønsteret colSums(is.na(df)) er den hurtigste måde at tælle manglende værdier pr. kolonne i en data frame. Det returnerer en navngivet numerisk vektor, der viser, hvor mange NA-værdier der er i hver kolonne.

# 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)), '
')

Andel af NA-værdier pr. kolonne

Hvis du dividerer med antallet af rækker, får du andelen af manglende værdier pr. kolonne. Det er mere informativt end rå optællinger, når kolonnerne har forskellige længder.

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()) — Frekvensoptælling

table(is.na(x)) opretter en navngivet frekvenstabel, der viser, hvor mange FALSE-værdier (tilstedeværende) og TRUE-værdier (manglende) der findes. Den er nem at aflæse hurtigt.

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)))

Find rækker med mindst én NA

Hvis du vil finde de rækker i en data frame, der indeholder mindst én manglende værdi, skal du bruge apply(is.na(df), 1, any). Resultatet er en logisk vektor med TRUE for ufuldstændige rækker.

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), '
')

Kontrol af et komplet datasæt

En praktisk arbejdsgang til NA-kontrol er at tælle, lokalisere og rapportere manglende værdier for at forstå datakvaliteten før analysen. Her er en selvstændig kontrolfunktion.

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')

Oversigt over registrering af NA

Hurtig reference til værktøjer til registrering af NA:

  • is.na(x) — logisk vektor: TRUE dér, hvor der er NA
  • anyNA(x) — enkelt TRUE/FALSE: findes der en NA?
  • sum(is.na(x)) — antal NA-værdier
  • mean(is.na(x)) — andel af NA-værdier
  • which(is.na(x)) — positioner for NA-værdier
  • colSums(is.na(df)) — antal NA-værdier pr. kolonne
  • table(is.na(x)) — frekvenstabel over NA/ikke-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)), '
')

Hurtigt tjek

Hvad returnerer sum(is.na(c(1, NA, 3, NA, 5)))?

Opsummering: Registrering og optælling af NA

Godt klaret! De vigtigste pointer fra denne lektion:

  • is.na(x) er det primære værktøj — returnerer en logisk vektor
  • sum(is.na(x)) tæller manglende værdier; mean(is.na(x)) giver andelen
  • anyNA(x) er et hurtigt tjek for, om der findes en NA
  • which(is.na(x)) viser de præcise positioner for NA-værdier
  • colSums(is.na(df)) er standardmåden at kontrollere en data frame på
  • Brug aldrig x == NA til at registrere NA — brug altid 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), '
')
Gratis at komme i gang

Lær R med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
43
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Registrering og optælling af manglende værdier” gratis?

Ja — alle 3 lektioner i læringssporet R Academy, inklusive “Registrering og optælling af manglende værdier”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. R Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Registrering og optælling af manglende værdier”?

Brug is.na(), anyNA() og sum(is.na()) til at gennemgå manglende data. Du øver dig i R Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på R Academy?

Der kræves ingen tidligere erfaring. R Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Registrering og optælling af manglende værdier”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne R Academy-lektion?

Ja. Alle R Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Forstå NA i R
  2. Registrering og optælling af manglende værdier
  3. Fjernelse og erstatning af NA-værdier
  4. NA i beregninger og aggregater
← Tilbage til R Academy