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ć
- Sprawdź typy funkcją
sapply(d, class)albostr(d). Kody kategorii po imporcie są zwykle liczbami, a liczby z przecinkiem dziesiętnym – tekstem. - 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.
- Zmienne nominalne zamień na
factor()z argumentamilevelsilabels, w kolejności z książki kodowej. Dla zmiennych na skali porządkowej dodajordered = TRUE. - 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
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łegofactor(). - 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.
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
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 regresjiWynik 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).
- 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
R dla początkujących
Od instalacji R i RStudio do pierwszego testu t: wczytanie CSV i .sav, ramka danych, wynik skali, statystyki opisowe, d Cohena. Dane i skrypt do pobrania.
Czytaj →PoradnikDane z Google Forms i LimeSurvey: kodowanie do SPSS i R
Eksport, nazwy zmiennych, rekodowanie Likerta, pozycje odwrócone, wielokrotny wybór i braki – krok po kroku, z kodem R i wzorem książki kodowej.
Czytaj →Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Wyceń analizęOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- 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
- 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}}