Factor in R: Kategorinen muuttuja ja jatkuvat muuttujat
โก รlykรคs yhteenveto
R:n Factor-funktio tallentaa kategorisen datan kokonaislukukoodien vektorina, johon on yhdistetty joukko tasoja. Tรคllรค tavoin kieli erottaa rajoitetun joukon kategorioita jatkuvasta mittauksesta.

Mikรค on tekijรค R:ssรค?
tekijรค R:ssรค on muuttuja, jota kรคytetรครคn datan luokitteluun ja tallentamiseen, ja sillรค on rajallinen mรครคrรค eri arvoja. Se tallentaa datan kokonaislukuarvojen vektorina. Factor R:ssรค tunnetaan myรถs kategorisena muuttujana, joka tallentaa sekรค merkkijono- ettรค kokonaislukudata-arvoja tasoina. Factoria kรคytetรครคn enimmรคkseen tilastollisessa mallinnuksessa ja tutkivassa data-analyysissรค R:n avulla.
Sisรคisesti tekijรค on kaksi yhdessรค liikkuvaa oliota: koodien kokonaislukuvektori ja merkkiattribuutti nimeltรค Jokainen koodi on sijainti kyseisessรค tasovektorissa, minkรค vuoksi tekijรคn tulostaminen nรคyttรครค sanat, kun taas luokittelematon() nรคyttรครค numeroita.
Tietojoukossa voimme erottaa kahdenlaisia โโmuuttujia: kategorinen ja jatkuva.
- R:n kategoristen muuttujien kuvaavissa tilastoissa arvo on rajoitettu ja perustuu yleensรค tiettyyn รครคrelliseen ryhmรครคn. Esimerkiksi R:n kategorinen muuttuja voi olla maat, vuosi, sukupuoli, ammatti.
- Jatkuva muuttuja voi kuitenkin saada minkรค tahansa arvon kokonaisluvusta desimaalilukuun. Esimerkiksi meillรค voi olla liikevaihto, osakkeen hinta jne.
Tรคtรค eroa kannattaa varjella, koska R valitsee รครคnettรถmรคsti eri oletusarvot kullekin. Numeerinen sarake tiivistetรครคn keskiarvolla ja mediaanilla, kun taas tekijรค tiivistetรครคn tasokohtaisilla lukumรครคrillรค. Kategorian tallentaminen tekstinรค tai numerona muuttaa siis saamaasi analyysia. Laajempi valikoima tallennustiloja kรคsitellรครคn oppaassa R-tietotyypit ja operaattorit.
Kategoriset muuttujat
Kategoriset muuttujat sisรครคn R tallennetaan faktoriin. Tarkistetaan alla oleva koodi, jolla merkkimuuttuja muunnetaan faktorimuuttujaksi R:ssรค. Monet mallinnus- ja koneoppimisrutiinit eivรคt voi kรคsitellรค raakatekstiรค, joten kategoriat on koodattava tasoina tai numeroina ennen mallin sovittamista.
Syntaksi
factor(x = character(), levels, labels = levels, ordered = is.ordered(x))
R-viittauksen perusosassa on kaksi lisรคargumenttia, jotka yllรค oleva lyhennetty muoto jรคttรครค pois: sulkea, joka poistaa arvot ennen tasojoukon rakentamista, ja nmax, tasojen lukumรครคrรคn ylรคraja, joka nopeuttaa erittรคin suurten vektorien muunnosta.
argumentit:
- xKategorisen datan vektori R:ssรค. Sen on oltava merkkijono tai kokonaisluku, ei desimaaliluku.
- : Mahdollisten x-arvojen vektori. Tรคmรค argumentti on valinnainen. Oletusarvo on vektorin x alkioiden yksilรถllinen luettelo nousevaan jรคrjestykseen lajiteltuna.
- tarratLisรครค R:n x-luokan luokkaan liittyvรครคn dataan tunniste. Esimerkiksi 1 voi saada tunnisteen mies ja 0 tunnisteen nainen.
- sulkeaPoissuljettujen arvojen vektori, joka poistetaan, kun tasojoukko muodostetaan. Poissuljetut arvot muuttuvat tuloksessa NA-arvoiksi.
- tilasiLooginen merkintรค, joka mรครคrittรครค, pidetรครคnkรถ tasoja annetussa jรคrjestyksessรค.
- nmaxValinnainen ylรคraja tasojen lukumรครคrรคlle, hyรถdyllinen pitkille vektoreille.
Esimerkiksi:
Muunnetaan merkkivektori tekijรคksi ja vahvistetaan muutos class():lla.
# 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)
lรคhtรถ:
## [1] "character" ## [1] "factor"
Luokka vaihtoi merkistรค tekijรครคn, eikรค tulostetuissa arvoissa muuttunut mitรครคn. On tรคrkeรครค muuttaa a jono tekijรคmuuttujaksi R:ssรค ennen koneoppimistehtรคvรครค, koska siinรค vaiheessa kategorioista tulee kiinteรค, validoitu joukko.
Kategorinen muuttuja R:ssรค voidaan jakaa nimellinen kategorinen muuttuja ja jรคrjestysluokan kategorinen muuttuja.
Nimellinen kategorinen muuttuja
Nominaalisella kategorisella muuttujalla on useita arvoja, mutta jรคrjestyksellรค ei ole merkitystรค. Esimerkiksi mies tai nainen. Nominaalisilla kategorisilla muuttujilla R:ssรค ei ole mitรครคn jรคrjestystรค.
# 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
lรคhtรถ:
## [1] blue red green white black yellow ## Levels: black blue green red white yellow
Factor_color-muuttujasta emme voi pรครคtellรค mitรครคn jรคrjestystรค. Tasoluettelo on aakkosellinen vain, koska levels-argumenttia ei annettu, joten R lajitteli yksilรถlliset arvot itse. Tรคmรค lajittelu seuraa aktiivista aluetta pelkรคn ASCII-koodiston sijaan, mikรค on yksi syy ilmaista tasot eksplisiittisesti aina, kun jรคrjestyksellรค on merkitystรค.
Ordinaal Kategorinen muuttuja
Jรคrjestysjรคrjestyksen mukaisilla kategorisilla muuttujilla on luonnollinen jรคrjestys. Jรคrjestys mรครคrรคytyy vektorin jรคrjestyksen mukaan, joka vรคlitetรครคn muuttujalle. argumentti, ja jos jรคrjestetty = TOSI, R:n tulee kรคsitellรค kyseistรค sekvenssiรค ranking-arvona pelkรคn listan sijaan. Arvon jรคrjestetty asettaminen = EPรTOSI ei kรครคnnรค ranking-arvoa; se yksinkertaisesti tuottaa tavallisen jรคrjestรคmรคttรถmรคn tekijรคn. Jos haluat asettaa arvon korkeimmasta matalimpaan, kรครคnnรค itse tasovektori.
Esimerkiksi:
Voimme kรคyttรครค yhteenvetoa laskeaksemme kunkin R:n tekijรคmuuttujan arvot.
# 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
lรคhtรถ:
## [1] evening morning afternoon midday
midnight evening
Konsoli tulostaa ensin arvot ja niiden alle sijoituksen. Seuraava lohko avautuu kyseisellรค Levels-rivillรค, joka on edelleen kommentoitu, joten sijoitus pysyy nรคkyvissรค, kun summary()-kutsu liitetรครคn edelliseen koodiin.
## Levels: morning < midday < afternoon < evening < midnight # Append the line to above code # Count the number of occurence of each level summary(factor_day)
lรคhtรถ:
## morning midday afternoon evening midnight ## 1 1 1 2 1
R jรคrjesti tason aamusta keskiyรถhรถn levels-argumentin mรครคrittรคmรคllรค tavalla. Koska tekijรค on jรคrjestyksessรค, vertailuoperaattorit, kuten < ja >, toimivat myรถs sen kanssa, mitรค ne eivรคt tee yllรค olevan nimellisen vรคritekijรคn kanssa.
Jatkuvat muuttujat
Jatkuvat luokkamuuttujat ovat R:n oletusarvo. Ne tallennetaan numeereina tai kokonaislukuina. Nรคemme tรคmรคn alla olevasta datasetistรค. mtcars on sisรครคnrakennettu dataset. Se kerรครค tietoa erityyppisistรค autoista. Voimme tuoda sen mtcars-funktion avulla ja tarkistaa mpg- eli mailia gallonaa kohden -muuttujan luokan. Se palauttaa numeerisen arvon, joka osoittaa jatkuvan muuttujan.
dataset <- mtcars class(dataset$mpg)
ulostulo
## [1] "numeric"
Kaikki numeeriset sarakkeet eivรคt ole aidosti jatkuvia. Samassa tietojoukossa cyl sisรคltรครค vain luvut 4, 6 ja 8, ja am vain luvut 0 ja 1, joten molemmat ovat luokkia, jotka sattuvat olemaan tallennettu numeroina. Niiden muuntaminen factor()-funktiolla ennen mallinnusta estรครค R:รครค kรคsittelemรคstรค 4 ja 6 sylinterin vรคlistรค etรคisyyttรค mitattuna suureena. Kรครคnteinen liike, jossa jatkuva sarake leikataan kaistoiksi, kรคsitellรครคn cut():lla.
Tekijรคtasot ja -merkinnรคt R:ssรค
levels-attribuutti on se osa tekijรครค, jonka sรครคtรคmiseen kรคytรคt eniten aikaa, koska se ohjaa sekรค tulostuvaa tietoa ettรค sitรค, mitรค malli kรคsittelee perustasona. Neljรค R-perusapufunktiota kattavat lรคhes kaikki tapaukset.
| Toiminto | Mitรค se tekee | Tyypillinen kรคyttรถ |
|---|---|---|
| tasot (f) | Lukee tai korvaa tasojen nimet | Lyhenteiden uudelleennimeรคminen luettaviksi otsikoiksi |
| nlevels(f) | Palauttaa tasojen lukumรครคrรคn | Luokan tarkistus ei rรคjรคhtรคnyt liittรคmisen jรคlkeen |
| uudelleentaso(f, ref) | Siirtรครค yhden tason eteenpรคin | Regression lรคhtรถtason valinta |
| pudotuslevels(f) | Poistaa tasot, joilla ei ole havaintoja | Siivoaminen osajoukkojen tai suodatusten jรคlkeen |
Alla oleva lohko soveltaa kaikkia neljรครค aiemmin luotuihin vรคri- ja sukupuolitekijรถihin.
# 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])
Kaksi yksityiskohtaa on syytรค muistaa. Levels()-funktiolle mรครคrittรคminen nimeรครค uudelleen sijainnin mukaan, joten yhteensopimaton vektori nimeรครค hiljaa vรครคrรคn kategorian uudelleen. Ja osajoukko sรคilyttรครค kaikki alkuperรคiset tasot, kunnes droplevels()-funktiota kutsutaan, minkรค vuoksi suodatettu datakehys voi silti piirtรครค tyhjiรค palkkeja. tarrat argumentti on jรคlleen erilainen: se nimeรครค tasot luontihetkellรค ja kahdennetut otsikot yhdistรคvรคt useita syรถtearvoja yhdeksi tasoksi.
Kuinka muuntaa tekijรค numeeriseksi tai merkiksi R:ssรค
Tรคmรค on yleisin yksittรคinen tekijรคvirhe R:ssรค. Koska tekijรค tallentaa kokonaislukukoodeja, as.numeric()-kutsun kรคyttรคminen palauttaa nรคmรค koodit nรคytรถllรค nรคkyvien arvojen sijaan. Vuosien 2021โ2023 tekijรคt palautuvat arvoina 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:n perusdokumentaatio suosittelee oikeaksi ja hieman nopeammaksi reitiksi as.numeric(levels(f))[f] ja helpommin luettavaksi vastineeksi as.numeric(as.character(f)). Molemmat lukevat ensin otsikon ja muuntavat sen vasta sen jรคlkeen.
- Hahmoon vaikuttava tekijรค: as.character(f) palauttaa otsikot pelkkรครค tekstiรค.
- Kokonaislukukoodien tekijรถihin: as.integer(f) tai unclass(f), kun koodit ovat sitรค mitรค todella haluat.
- Merkki, joka on otettava huomioon: factor(x) tai nopeampi as.factor(x)-oikotie.
- Numeerinen tekijรค: factor(x) diskreeteille koodeille, cut(x, breaks) jatkuville arvoille, jotka tarvitsevat kaistanleveyttรค.
Yksi suojatoimi koskee niitรค kaikkia. Jos x:n arvoa ei esiinny tasovektorissa, factor() asettaa kyseisen elementin arvoon NA virheen aiheuttamisen sijaan, joten irrallinen vรคlilyรถnti tai isojen kirjainten ero voi hiljaisesti poistaa rivejรค. Yksilรถllisten arvojen vertaaminen ennen ja jรคlkeen muunnoksen tai datakehyksen lajittelu uudessa sarakkeessa paljastaa ongelman nopeasti.
Tekijรค vs. merkki vs. numeerinen R:ssรค: Milloin kutakin kรคytetรครคn
Tallennustilan valitseminen ajoissa sรครคstรครค paljon virheenkorjausta myรถhemmin. Taulukossa vertaillaan kolmea tilaa, joita teksti- tai koodisarakkeella voi olla.
| Omaisuus | Tekijรค | Merkki | Numeerinen |
|---|---|---|---|
| Tallennettu nimellรค | Kokonaislukukoodit ja levels-attribuutti | Jouset | Doubles tai kokonaislukuja |
| Kiinteรคt arvot | Kyllรค, tasojen mรครคrittelemรคnรค | Ei | Ei |
| Mukautettu nรคyttรถjรคrjestys | Kyllรค, tasojen kautta | Vain aakkosjรคrjestyksessรค | Vain numeerinen |
| Aritmeettinen | Ei sallittu | Ei sallittu | Sallittu |
| Mallien kontrastit | Rakennettu automaattisesti | Pakotettu ensin | Kรคsitellรครคn mittana |
Kรคyttรครค tekijรค kun arvot tulevat tunnetusta, suljetusta luettelosta, kun nรคyttรถ- tai sijoitusjรคrjestyksellรค on merkitystรค tai kun sarake syรถttรครค tietoa mallille tai kuvaajan selitteelle. Kรคytรค. merkki vapaata tekstiรค, tunnisteita ja kaikkea, mitรค jรคsennรคt tai liitรคt, kuten nimiรค, muistiinpanoja ja koodeja, jotka saapuvat jatkuvasti uusilla arvoilla. Kรคytรค numeerinen vain silloin, kun kahden arvon vรคlinen etรคisyys on merkityksellinen.
Alla oleva lohko nรคyttรครค nopeimmat tavat tarkistaa, mitรค sinulla todellisuudessa 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)
Kaksi tapaa pitรคvรคt valinnan rehellisenรค. Suorita sapply(df, class) jokaisen tuonnin jรคlkeen, koska yksikin satunnaismerkki numeerisessa sarakkeessa muuttaa koko sarakkeen tekstiksi. Ja muunna tekijรคksi mahdollisimman myรถhรครคn, sen jรคlkeen, kun tiedot on puhdistettu ja yhdistetty, jotta dplyr Liitokset ja suodattimet vertailevat edelleen tavallisia merkkijonoja yhteensopimattomien tasojoukkojen sijaan.
