0Pricing
R Academy · Lekcja

Wykrywanie i zliczanie brakujących wartości

Używaj is.na(), anyNA() i sum(is.na()) do kontroli brakujących danych.

Wykrywanie i zliczanie brakujących wartości to bezpłatna lekcja R Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.

is.na() — podstawowe narzędzie wykrywania

is.na(x) sprawdza każdy element x i zwraca wektor logiczny o tej samej długości, zawierający TRUE w miejscach, w których wartość to NA (lub NaN). Jest to podstawowe narzędzie do wykrywania brakujących wartości.

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

Zliczanie wartości NA za pomocą sum(is.na())

Ponieważ w działaniach arytmetycznych TRUE == 1, a FALSE == 0, wyrażenie sum(is.na(x)) zlicza całkowitą liczbę brakujących wartości. mean(is.na(x)) zwraca odsetek brakujących wartości.

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() — szybkie sprawdzanie obecności

anyNA(x) zwraca pojedynczą wartość TRUE, jeśli dowolny element ma wartość NA, a w przeciwnym razie FALSE. Działa szybciej niż any(is.na(x)), ponieważ kończy działanie po znalezieniu pierwszego 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()) — znajdowanie pozycji

which(is.na(x)) zwraca indeksy (pozycje) brakujących wartości w wektorze. Jest to niezbędne podczas sprawdzania, które obserwacje są niekompletne, oraz przy celowym uzupełnianiu braków.

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

Zliczanie wartości NA w ramce danych

Dla ramek danych is.na(df) zwraca macierz logiczną o tych samych wymiarach. Połączenie tej funkcji z colSums() pozwala zliczyć brakujące wartości w każdej kolumnie — to szybki sposób na sprawdzenie jakości danych.

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

Schemat colSums(is.na(df))

Schemat colSums(is.na(df)) to najszybszy sposób zliczania brakujących wartości w poszczególnych kolumnach ramki danych. Zwraca nazwany wektor liczbowy pokazujący, ile wartości NA znajduje się w każdej kolumnie.

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

Odsetek wartości NA w kolumnie

Podzielenie przez liczbę wierszy daje odsetek brakujących wartości w każdej kolumnie. Jest to bardziej miarodajne niż surowe liczności, gdy kolumny mają różne długości.

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()) — zliczanie częstości

table(is.na(x)) tworzy nazwaną tabelę częstości pokazującą, ile jest wartości FALSE (obecnych) i TRUE (brakujących). Tabelę można łatwo odczytać na pierwszy rzut oka.

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

Znajdowanie wierszy zawierających dowolne NA

Aby znaleźć wiersze ramki danych zawierające co najmniej jedną brakującą wartość, należy użyć apply(is.na(df), 1, any). Wynikiem jest wektor logiczny zawierający TRUE dla niekompletnych wierszy.

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

Sprawdzanie kompletności zbioru danych

Praktyczny schemat kontroli NA obejmuje zliczanie, lokalizowanie i raportowanie brakujących wartości w celu oceny jakości danych przed analizą. Poniżej znajduje się samodzielna funkcja do przeprowadzenia takiej kontroli.

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

Podsumowanie wykrywania NA

Podręczna lista narzędzi do wykrywania NA:

  • is.na(x) — wektor logiczny: TRUE w miejscach występowania NA
  • anyNA(x) — pojedyncza wartość TRUE/FALSE: czy występuje jakiekolwiek NA?
  • sum(is.na(x)) — liczba wartości NA
  • mean(is.na(x)) — odsetek wartości NA
  • which(is.na(x)) — pozycje wartości NA
  • colSums(is.na(df)) — liczba wartości NA w każdej kolumnie
  • table(is.na(x)) — tabela częstości wartości NA i innych wartości
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)), '
')

Szybkie sprawdzenie

Jaki wynik zwraca wyrażenie sum(is.na(c(1, NA, 3, NA, 5)))?

Podsumowanie: wykrywanie i zliczanie wartości NA

Dobra robota! Najważniejsze informacje z tej lekcji:

  • is.na(x) to podstawowe narzędzie — zwraca wektor logiczny
  • sum(is.na(x)) zlicza braki, a mean(is.na(x)) zwraca ich odsetek
  • anyNA(x) szybko sprawdza, czy występuje jakiekolwiek NA
  • which(is.na(x)) pokazuje dokładne pozycje wartości NA
  • colSums(is.na(df)) to standardowy sposób sprawdzania ramki danych
  • Nigdy nie należy używać x == NA do wykrywania NA — zawsze należy używać 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), '
')

Często zadawane pytania

Czy lekcja „Wykrywanie i zliczanie brakujących wartości” jest bezpłatna?

Tak — pełny tekst „Wykrywanie i zliczanie brakujących wartości” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wykrywanie i zliczanie brakujących wartości”?

Używaj is.na(), anyNA() i sum(is.na()) do kontroli brakujących danych. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć R Academy?

Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wykrywanie i zliczanie brakujących wartości”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?

Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zrozumienie NA w R
  2. Wykrywanie i zliczanie brakujących wartości
  3. Usuwanie i zastępowanie wartości NA
  4. NA w obliczeniach i agregacjach
← Powrót do R Academy