Słownik metodologiczny · Przygotowanie danych

Kodowanie zmiennych w R – typy, czynniki i kody braków

Płeć zapisana jako 1 i 2, kod 99 zamiast braku, liczby wczytane jako tekst – po imporcie do R to codzienność. Pokazujemy, jak nadać zmiennym właściwe typy i etykiety.

Strona główna / Słownik / Kodowanie zmiennych w R
W skrócie: Kodowanie zmiennych w R to nadanie kolumnom właściwych typów: liczby jako numeric, kategorie jako factor() z etykietami, kategorie uporządkowane jako ordered. Kody braków zamień na NA przed analizą, a czynnik z liczbami zamieniaj przez as.character().

Co to jest kodowanie zmiennych w R?

Kodowanie zmiennych w R to nadanie każdej kolumnie właściwego typu i znaczenia: liczby zostają liczbami (numeric), kategorie stają się czynnikami (factor) z etykietami, kategorie uporządkowane – czynnikami porządkowymi (ordered), a kody braków, np. 99, zamieniasz na NA. Od typu zależy, co R zrobi ze zmienną w tabelach, wykresach i modelach. Zmianę samych wartości, np. odwrócenie pozycji, opisuje osobne hasło rekodowanie.

Jak to zrobić

  1. Sprawdź typy funkcją sapply(d, class) albo str(d). Kody kategorii po imporcie są zwykle liczbami, a liczby z przecinkiem dziesiętnym – tekstem.
  2. Zamień kody braków danych na NA, zanim cokolwiek policzysz. Broman i Woo (2018) zalecają jeden spójny sposób zapisu braków w całym zbiorze.
  3. Zmienne nominalne zamień na factor() z argumentami levels i labels, w kolejności z książki kodowej. Dla zmiennych na skali porządkowej dodaj ordered = TRUE.
  4. Wybierz kategorię odniesienia funkcją relevel(). W regresji R zamienia czynnik na zmienne 0/1 (dummy coding) względem pierwszego poziomu; Schad i in. (2020) pokazują, że inny sposób kodowania kontrastów zmienia znaczenie współczynników.

Przykład

W pliku z ankiety płeć zapisano jako 1–3, wykształcenie jako 1–3 z kodem 99 dla braku, a wynik testu wczytał się jako tekst. Po zamianie 99 na NA tabela wykształcenia pokazuje 1 osobę ze średnim, 2 z licencjatem, 2 z magisterium i 1 brak, zamiast fałszywej kategorii „99”. Pułapka: czynnik z wartościami „10”, „20”, „5” zamieniony wprost przez as.numeric() daje 1, 2, 3, czyli numery poziomów. Poprawny wynik, 10, 20 i 5, daje dopiero as.numeric(as.character()).

Jak opisać w pracy

Analizy wykonano w R. Zmienne kategorialne zakodowano jako czynniki z etykietami zgodnymi z książką kodową (wykształcenie jako czynnik porządkowy), a kod 99 oznaczający brak odpowiedzi zamieniono na brak danych. W modelach regresji kategorią odniesienia dla płci byli mężczyźni.

Na co uważać

  • Kod braku pozostawiony jako liczba zawyża średnią i tworzy nieistniejącą kategorię. Sprawdzaj table(x, useNA = "ifany").
  • Czynnik porządkowy w lm() dostaje kontrasty wielomianowe, a nie zmienne 0/1. Jeśli chcesz porównań z grupą odniesienia, użyj zwykłego factor().
  • Etykiety z pliku SPSS wczytanego jako plik .sav zamienisz na czynnik funkcją as_factor() z pakietu haven.

Import i pierwsze kroki w R opisuje wpis R dla początkujących.

Przykład reprodukowalny

Kodowanie zmiennych w R – kod

Kod sprawdza typy kolumn, zamienia kod braku na NA, tworzy czynnik z etykietami i czynnik porządkowy, pokazuje pułapkę as.numeric() i zmianę kategorii odniesienia.

Typy, etykiety i braki danych

Dane wejściowe: sześć osób z kodami płci, wykształcenia (99 = brak) i wynikiem testu wczytanym jako tekst (dane przykładowe).

Co odczytać: typy przed i po, tabelę wykształcenia z brakiem, wynik dwóch sposobów zamiany czynnika na liczby i kolejność poziomów po relevel().

R
d <- data.frame(plec = c(1, 2, 2, 1, 3, 2),           # 1 = kobieta, 2 = mężczyzna, 3 = inna
                wyksz = c(2, 3, 1, 3, 2, 99),         # 1 = średnie, 2 = licencjat, 3 = magister, 99 = brak
                wynik = c("12", "15", "9", "14", "11", "13"))   # liczby wczytane jako tekst
sapply(d, class)
d$wyksz[d$wyksz == 99] <- NA                          # kod braku na NA, zanim cokolwiek policzysz
d$plec  <- factor(d$plec, levels = 1:3, labels = c("kobieta", "mężczyzna", "inna"))
d$wyksz <- factor(d$wyksz, levels = 1:3, labels = c("średnie", "licencjat", "magister"), ordered = TRUE)
d$wynik <- as.numeric(d$wynik)
str(d)
table(d$wyksz, useNA = "ifany")
f <- factor(c("10", "20", "5"))                       # liczby zapisane jako factor
as.numeric(f)                                         # pułapka: numery poziomów, nie wartości
as.numeric(as.character(f))                           # poprawnie
levels(relevel(d$plec, ref = "mężczyzna"))            # inna kategoria odniesienia w regresji
Wynik w R
       plec       wyksz       wynik 
  "numeric"   "numeric" "character" 
'data.frame':	6 obs. of  3 variables:
 $ plec : Factor w/ 3 levels "kobieta","mężczyzna",..: 1 2 2 1 3 2
 $ wyksz: Ord.factor w/ 3 levels "średnie"<"licencjat"<..: 2 3 1 3 2 NA
 $ wynik: num  12 15 9 14 11 13

  średnie licencjat  magister      <NA> 
        1         2         2         1 
[1] 1 2 3
[1] 10 20  5
[1] "mężczyzna" "kobieta"   "inna"     

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietu base).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/

Najczęstsze pytania

Jak nadać etykiety wartościom zmiennej w R?

Funkcją factor(x, levels = 1:3, labels = c("…", "…", "…")). Kolejność etykiet musi odpowiadać kolejności kodów z książki kodowej.

Dlaczego as.numeric() na czynniku daje złe liczby?

Zwraca numery poziomów czynnika, a nie zapisane wartości. Najpierw zamień czynnik na tekst: as.numeric(as.character(x)).

Kiedy użyć ordered = TRUE w R?

Gdy kategorie mają naturalny porządek, np. wykształcenie. Pamiętaj, że w regresji czynnik porządkowy dostaje kontrasty wielomianowe zamiast zmiennych 0/1.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Broman, K. W., & Woo, K. H. (2018). Data organization in spreadsheets. The American Statistician, 72(1), 2–10. https://doi.org/10.1080/00031305.2017.1375989 ● Otwarty dostęp: pełny tekst
  2. Schad, D. J., Vasishth, S., Hohenstein, S., & Kliegl, R. (2020). How to capitalize on a priori contrasts in linear (mixed) models: A tutorial. Journal of Memory and Language, 110, Article 104038. https://doi.org/10.1016/j.jml.2019.104038 ● Otwarty dostęp

Cytowania BibTeX

@article{broman2018data, author={Broman, Karl W. and Woo, Kara H.}, title={{Data organization in spreadsheets}}, journal={The American Statistician}, year={2018}, volume={72}, number={1}, pages={2--10}, doi={10.1080/00031305.2017.1375989}}
@article{schad2020capitalize, author={Schad, Daniel J. and Vasishth, Shravan and Hohenstein, Sven and Kliegl, Reinhold}, title={{How to capitalize on a priori contrasts in linear (mixed) models: A tutorial}}, journal={Journal of Memory and Language}, year={2020}, volume={110}, eid={104038}, doi={10.1016/j.jml.2019.104038}}
R