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 NAanyNA(x)— pojedyncza wartość TRUE/FALSE: czy występuje jakiekolwiek NA?sum(is.na(x))— liczba wartości NAmean(is.na(x))— odsetek wartości NAwhich(is.na(x))— pozycje wartości NAcolSums(is.na(df))— liczba wartości NA w każdej kolumnietable(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 logicznysum(is.na(x))zlicza braki, amean(is.na(x))zwraca ich odsetekanyNA(x)szybko sprawdza, czy występuje jakiekolwiek NAwhich(is.na(x))pokazuje dokładne pozycje wartości NAcolSums(is.na(df))to standardowy sposób sprawdzania ramki danych- Nigdy nie należy używać
x == NAdo 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
- Zrozumienie NA w R
- Wykrywanie i zliczanie brakujących wartości
- Usuwanie i zastępowanie wartości NA
- NA w obliczeniach i agregacjach