Tegur R: Kategoorilised muutujad ja pidevad muutujad
โก Nutikas kokkuvรตte
R-i funktsioon Factor salvestab kategoorilisi andmeid tรคisarvukoodide vektorina, mis on seotud tasemete komplektiga โ nii eraldab keel piiratud kategooriate rรผhma pidevast mรตรตtmisest.

Mis on R-i tegur?
Tegur R-s on muutuja, mida kasutatakse andmete kategoriseerimiseks ja salvestamiseks ning millel on piiratud arv erinevaid vรครคrtusi. See salvestab andmeid tรคisarvude vรครคrtuste vektorina. Faktor R-is on tuntud ka kui kategooriline muutuja, mis salvestab nii string- kui ka tรคisarvude vรครคrtusi tasemetena. Faktorit kasutatakse enamasti statistilises modelleerimises ja uurimuslikus andmeanalรผรผsis R-is.
Sisemiselt on tegur kaks koos liikuvat objekti: tรคisarvuline koodide vektor ja mรคrgiatribuut nimega tasetIga kood on selles tasemevektoris positsioon, mistรตttu teguri printimine nรคitab sรตnu, samal ajal kui klassist eemaldamine() nรคitab numbreid.
Andmekogus saame eristada kahte tรผรผpi muutujaid: kategooriline ja pidev.
- R-i kategooriliste muutujate kirjeldavas statistikas on vรครคrtus piiratud ja pรตhineb tavaliselt konkreetsel piiratud rรผhmal. Nรคiteks vรตib R-i kategooriliseks muutujaks olla riigid, aasta, sugu, amet.
- Pidev muutuja vรตib aga vรตtta mis tahes vรครคrtused tรคisarvust kรผmnendmurruni. Nรคiteks vรตib meil olla tulu, aktsia hind jne.
Seda eristust tasub meeles pidada, sest R valib vaikselt iga veeru jaoks erinevad vaikesรคtted. Numbriline veerg summeeritakse keskmise ja mediaaniga, samas kui tegur summeeritakse tasemete arvuga. Kategooria tekstina vรตi numbrina salvestamine muudab seega saadavat analรผรผsi. Laiem valik salvestusreลพiime on kรคsitletud juhendis R-andmetรผรผbid ja operaatorid.
Kategoorilised muutujad
Kategoorilised muutujad sisse R salvestatakse faktorisse. Vaatame allolevat koodi, et teisendada R-is mรคrkmuutuja faktorimuutujaks. Paljud modelleerimis- ja masinรตpperutiinid ei saa toorteksti kasutada, seega tuleb kategooriad enne mudeli sobitamist kodeerida tasemete vรตi numbritena.
Sรผntaks
factor(x = character(), levels, labels = levels, ordered = is.ordered(x))
R-i baasviide dokumenteerib veel kaks argumenti, mis รผlaltoodud lรผhendatud vormis puuduvad: vรคlistama, mis eemaldab vรครคrtused enne tasemekomplekti loomist ja nmax, tasemete arvu รผlempiir, mis kiirendab vรคga suurte vektorite teisendamist.
Argumendid:
- xR-i kategooriliste andmete vektor. Peab olema string vรตi tรคisarv, mitte kรผmnendmurr.
- taset: Vรตimalike vรครคrtuste vektor, mille vรตtab x. See argument on valikuline. Vaikimisi vรครคrtus on vektori x elementide unikaalne loend, mis on sorteeritud kasvavas jรคrjekorras.
- sildidLisage R-i x kategoorilisele andmele silt. Nรคiteks 1 saab sildi โmeesโ ja 0 silt โnaineโ.
- vรคlistamaVรครคrtuste vektor, mis tasemekomplekti moodustamisel eemaldatakse. Vรคlja jรคetud vรครคrtused muutuvad tulemuses puuduvateks.
- tellitudLoogiline lipp, mis mรครคrab, kas tasemeid tuleks kรคsitleda antud jรคrjekorras jรคrjestatud olevat.
- nmaxValikuline รผlempiir tasemete arvule, kasulik pikkade vektorite puhul.
Nรคide:
Teisendame mรคrgivektori faktoriks ja kinnitame muutust class() abil.
# Create gender vector gender_vector <- c("Male", "Female", "Female", "Male", "Male") class(gender_vector) # Convert gender_vector to a factor factor_gender_vector <-factor(gender_vector) class(factor_gender_vector)
Vรคljund:
## [1] "character" ## [1] "factor"
Klass lรผlitus mรคrgilt tegurile ja prinditud vรครคrtuste osas ei muutunud midagi. Oluline on teisendada a nรถรถr R-i faktorimuutujaks enne masinรตppeรผlesannet, sest just sel hetkel muutuvad kategooriad fikseeritud ja valideeritud hulgaks.
Kategoorilise muutuja R-s vรตib jagada nominaalne kategooriline muutuja ja jรคrguline kategooriline muutuja.
Nominaalne kategooriline muutuja
Nominaalsel kategoorilisel muutujal on mitu vรครคrtust, kuid jรคrjekord pole oluline. Nรคiteks mees vรตi naine. R-i nominaalsed kategoorilised muutujad ei kanna mingit jรคrjestust.
# Create a color vector color_vector <- c('blue', 'red', 'green', 'white', 'black', 'yellow') # Convert the vector to factor factor_color <- factor(color_vector) factor_color
Vรคljund:
## [1] blue red green white black yellow ## Levels: black blue green red white yellow
Vรคrvifaktori (factor_color) pรตhjal ei saa me jรคrjestust kindlaks teha. Tasemete loend on tรคhestikulises jรคrjekorras, kuna levels argumenti ei antud, seega sorteeris R unikaalsed vรครคrtused ise. See sortimine jรคrgib aktiivset lokaati, mitte tavalist ASCII-koodi, mis on รผks pรตhjus tasemete selgesรตnaliseks mรคrkimiseks alati, kui jรคrjestus on oluline.
Ordinaal Kategooriline muutuja
Ordinaalsetel kategoorilistel muutujatel on loomulik jรคrjestus. Jรคrjestus tuleneb vektori jรคrjestusest, mis edastatakse muutujale. taset argument ja jรคrjestatud = TRUE annab R-ile kรคsu kรคsitleda seda jรคrjestust paremusjรคrjestuse, mitte tรผhja loendina. Paigutus jรคrjestatud = FALSE ei pรถรถra jรคrjestust รผmber; see lihtsalt loob tavalise jรคrjestamata teguri. Kรตrgeimast madalaimani jรคrjestamiseks tuleb tasemete vektor ise รผmber pรถรถrata.
Nรคide:
R-i iga tegurimuutuja vรครคrtuste loendamiseks saame kasutada kokkuvรตtet.
# Create Ordinal categorical vector day_vector <- c('evening', 'morning', 'afternoon', 'midday', 'midnight', 'evening') # Convert `day_vector` to a factor with ordered level factor_day <- factor(day_vector, order = TRUE, levels =c('morning', 'midday', 'afternoon', 'evening', 'midnight')) # Print the new variable factor_day
Vรคljund:
## [1] evening morning afternoon midday
midnight evening
Konsool prindib esmalt vรครคrtused ja nende alla paremusjรคrjestuse. Jรคrgmine plokk avaneb selle Levels reaga, mis on endiselt kommenteeritud, seega jรครคb paremusjรคrjestus nรคhtavaks, kuni summary() kutse eelmisele koodile lisatakse.
## Levels: morning < midday < afternoon < evening < midnight # Append the line to above code # Count the number of occurence of each level summary(factor_day)
Vรคljund:
## morning midday afternoon evening midnight ## 1 1 1 2 1
R jรคrjestas taseme 'hommikust' 'keskรถรถni', nagu on tรคpsustatud levels argumendis. Kuna tegur on jรคrjestatud, toimivad sellega ka vรตrdlusoperaatorid, nรคiteks < ja >, mida nad รผlaltoodud nominaalse vรคrviteguri puhul ei tee.
Pidevad muutujad
Pideva klassi muutujad on R-is vaikevรครคrtused. Neid salvestatakse numbriliste vรตi tรคisarvudena. Seda nรคeme allolevast andmestikust. mtcars on sisseehitatud andmestik. See kogub teavet erinevat tรผรผpi autode kohta. Saame selle mtcarsi abil importida ja kontrollida muutuja mpg (miil galloni kohta) klassi. See tagastab numbrilise vรครคrtuse, mis nรคitab pidevat muutujat.
dataset <- mtcars class(dataset$mpg)
Vรคljund
## [1] "numeric"
Mitte iga numbriline veerg pole tรตeliselt pidev. Samas andmestikus sisaldab cyl ainult vรครคrtusi 4, 6 ja 8 ning am ainult vรครคrtusi 0 ja 1, seega on mรตlemad kategooriad, mis on salvestatud arvudena. Nende teisendamine funktsiooniga factor() enne modelleerimist takistab R-il kรคsitlemast 4 ja 6 silindri vahelist tรผhimikku mรตรตdetud suurusena. Vastupidine samm, pideva veeru lรตikamine ribadeks, teostatakse funktsiooniga cut().
Faktoritasemed ja sildid R-is
Atribuut โlevelsโ on teguri osa, mille muutmisele kulutate kรตige rohkem aega, kuna see kontrollib nii seda, mis prinditakse, kui ka seda, mida mudel baasjoonena kรคsitleb. Neli baas-R abimeest katavad peaaegu iga juhtumi.
| funktsioon | Mida see teeb | Tรผรผpiline kasutamine |
|---|---|---|
| tasemed (f) | Loeb vรตi asendab tasemete nimesid | Lรผhendite รผmbernimetamine loetavateks siltideks |
| nlevels(f) | Tagastab tasemete arvu | Kategooria kontrollimine ei plahvatanud pรคrast liitumist |
| uuesti level(f, ref) | Liigub รผhe taseme vรตrra ettepoole | Regressiooni baasjoone valimine |
| droplevels(f) | Eemaldab tasemed, millel pole vaatlusi | Puhastamine pรคrast alamhulga lisamist vรตi filtreerimist |
Allolev plokk rakendab kรตiki nelja varem loodud vรคrvi- ja sooteguritele.
# Inspect the levels of an existing factor levels(factor_color) # the level names, in the order R stored them nlevels(factor_color) # how many distinct levels exist # Rename the levels in place (the new vector must follow the same order) levels(factor_color) <- c('Black', 'Blue', 'Green', 'Red', 'White', 'Yellow') # Attach labels at creation time instead of renaming afterwards gender_coded <- factor(c(1, 0, 0, 1, 1), levels = c(0, 1), labels = c('female', 'male')) # Make 'male' the reference level that modelling functions compare against gender_coded <- relevel(gender_coded, ref = 'male') # Remove levels that survived a subset but no longer occur in the data subset_color <- droplevels(factor_color[1:3])
Tasub meeles pidada kahte detaili. Funktsioonile levels() omistamine nimetab รผmber positsiooni jรคrgi, seega mittevastav vektor nimetab vaikselt รผmber vale kategooria. Ja alamhulk hoiab iga algset taset kuni droplevels() kutsumiseni, mistรตttu filtreeritud... andmeraam saab ikka tรผhje tulpasid joonistada. sildid Argument on jรคlle erinev: see nimetab tasemed loomise ajal ja dubleeritud sildid รผhendavad mitu sisendvรครคrtust รผheks tasemeks.
Kuidas teisendada tegurit numbriliseks vรตi mรคrgiks R-is
See on R-i kรตige levinum faktori viga. Kuna faktoris salvestatakse tรคisarvukoode, tagastab as.numeric() kutsumine need koodid, mitte ekraanil kuvatavad vรครคrtused. Aastate 2021 kuni 2023 faktori vรครคrtused on 1, 2 ja 3.
# A factor whose labels happen to look like numbers year_factor <- factor(c('2021', '2023', '2022', '2023')) # WRONG: this returns the internal codes 1, 3, 2, 3 - not the years as.numeric(year_factor) # RIGHT: read the label through the levels attribute first as.numeric(levels(year_factor))[year_factor] # Equivalent and easier to remember, but slightly slower as.numeric(as.character(year_factor)) # Back to plain text as.character(year_factor)
R-i baasdokumentatsioon soovitab รตige ja veidi kiirema marsruudina as.numeric(levels(f))[f], kus hรตlpsamini loetava vastena on as.numeric(as.character(f)). Mรตlemad loevad esmalt sildi ja teisendavad seejรคrel.
- Tegur iseloomule: as.character(f) tagastab sildid lihttekstina.
- Tรคisarvulisteks faktoriteks koodid: as.integer(f) vรตi unclass(f), kui koodid on just sellised, nagu sa vajad.
- Tegelane, keda arvestada: factor(x) vรตi kiirem otsetee as.factor(x).
- Numbriline tegurdamiseks: factor(x) diskreetsete koodide jaoks, cut(x, breaks) pidevate vรครคrtuste jaoks, mis vajavad ribastamist.
รks kaitsemeede kehtib neile kรตigile. Kui x vรครคrtus tasemete vektoris ei esine, mรครคrab factor() selle elemendi vรครคrtuseks NA, selle asemel et viga tekitada, seega vรตib hulkuv tรผhik vรตi suurtรคhtede erinevus mรคrkamatult ridu kustutada. Unikaalsete vรครคrtuste vรตrdlemine enne ja pรคrast teisendamist vรตi andmeraami sorteerimine uuel veerul paljastab probleemi kiiresti.
Faktor vs mรคrk vs numbriline R-is: millal igaรผht kasutada
Salvestusreลพiimi varajane valimine sรครคstab hilisemat silumist suurel hulgal. Tabelis vรตrreldakse kolme reลพiimi, mida teksti- vรตi koodiveerud saavad kasutada.
| vara | Faktor | Iseloom | Arv- |
|---|---|---|---|
| Salvestatud kui | Tรคisarvukoodid pluss levels atribuut | Keelpillid | Doubles vรตi tรคisarvud |
| Fikseeritud vรครคrtuste kogum | Jah, tasemete kaupa mรครคratletud | Ei | Ei |
| Kohandatud kuvamisjรคrjekord | Jah, lรคbi tasemete | Ainult tรคhestikulises jรคrjekorras | Ainult numbriline |
| Aritmeetika | Ei ole lubatud | Ei ole lubatud | lubatud |
| Mudeli kontrastid | Ehitatud automaatselt | Esmalt sunniti | Mรตรตtmisena kรคsitletud |
Kasutama faktor kui vรครคrtused pรคrinevad teadaolevast suletud loendist, kui kuvamis- vรตi jรคrjestusjรคrjekord on oluline vรตi kui veerg annab teavet mudeli vรตi graafiku legendi kohta. Kasutage. iseloom vaba teksti, identifikaatorite ja kรตige muu jaoks, mida parsite vรตi mille alusel รผhendate, nรคiteks nimed, mรคrkmed ja koodid, mis saabuvad pidevalt uute vรครคrtustega. Kasutage arv- ainult siis, kui kahe vรครคrtuse vaheline kaugus on oluline.
Allolev plokk nรคitab kiireimaid viise, kuidas kontrollida, mis teil tegelikult on.
# Ask R what each column of a data frame actually is sapply(mtcars, class) # Direct membership tests is.factor(factor_day) is.ordered(factor_day) # unclass() exposes the integer codes hiding behind the labels unclass(factor_color)
Valiku รตigsuse tagavad kaks harjumust. Kรคivita pรคrast iga importi sapply(df, class), sest รผksainus ekslik mรคrk numbrilises veerus muudab kogu veeru tekstiks. Ja teisenda teguriks nii hilja kui vรตimalik, pรคrast andmete puhastamist ja รผhendamist, nii et dplyr Liitmised ja filtrid vรตrdlevad endiselt tavalisi stringe, mitte mittevastavaid tasemekomplekte.
