Faktor i R: Kategoriske variable og kontinuerlige variabler
โก Smart oppsummering
Faktor i R lagrer kategoriske data som en vektor av heltallskoder parret med et sett med nivรฅer, som er hvordan sprรฅket skiller en begrenset gruppe kategorier fra en kontinuerlig mรฅling.

Hva er faktor i R?
Faktor i R er en variabel som brukes til รฅ kategorisere og lagre data, og har et begrenset antall forskjellige verdier. Den lagrer dataene som en vektor av heltallsverdier. Faktor i R er ogsรฅ kjent som en kategorisk variabel som lagrer bรฅde streng- og heltallsdataverdier som nivรฅer. Faktor brukes mest i statistisk modellering og utforskende dataanalyse med R.
Internt er en faktor to objekter som beveger seg sammen: en heltallsvektor av koder og et tegnattributt kalt nivรฅerHver kode er en posisjon i det nivรฅvektoren, og det er derfor det รฅ skrive ut en faktor viser ord mens uklasse() viser tall.
I et datasett kan vi skille mellom to typer variabler: kategorisk og kontinuerlig.
- I beskrivende statistikk for kategoriske variabler i R er verdien begrenset og vanligvis basert pรฅ en bestemt begrenset gruppe. For eksempel kan en kategorisk variabel i R vรฆre land, รฅr, kjรธnn, yrke.
- En kontinuerlig variabel kan imidlertid ta alle verdier, fra heltall til desimaltall. For eksempel kan vi ha omsetningen, prisen pรฅ en aksje osv.
Det er verdt รฅ vokte over dette skillet, fordi R i stillhet velger forskjellige standardverdier for hver. En numerisk kolonne oppsummeres med et gjennomsnitt og en median, mens en faktor oppsummeres med antall per nivรฅ. ร lagre en kategori som tekst eller som et tall endrer derfor analysen du fรฅr. Det bredere settet med lagringsmoduser er dekket i veiledningen til R-datatyper og operatorer.
Kategoriske variabler
Kategoriske variabler i R lagres i en faktor. La oss sjekke koden nedenfor for รฅ konvertere en tegnvariabel til en faktorvariabel i R. Mange modellerings- og maskinlรฆringsrutiner kan ikke forbruke rรฅtekst, sรฅ kategoriene mรฅ kodes som nivรฅer eller som tall fรธr modellen tilpasses.
syntax
factor(x = character(), levels, labels = levels, ordered = is.ordered(x))
Basis-R-referansen dokumenterer to ytterligere argumenter som den forkortede formen ovenfor utelater: ekskludere, som fjerner verdier fรธr nivรฅsettet bygges, og nmax, en รธvre grense for antall nivรฅer som fremskynder konverteringen av veldig store vektorer.
argumenter:
- xEn vektor med kategoriske data i R. Mรฅ vรฆre en streng eller et heltall, ikke et desimal.
- nivรฅerEn vektor med mulige verdier tatt av x. Dette argumentet er valgfritt. Standardverdien er den unike listen over elementer i vektoren x, sortert i stigende rekkefรธlge.
- etiketterLegg til en etikett til de x kategoriske dataene i R. For eksempel kan 1 ta etiketten mann, mens 0 kan ta etiketten kvinne.
- ekskludereEn vektor med verdier som skal fjernes nรฅr nivรฅsettet dannes. Ekskluderte verdier blir NA i resultatet.
- bestiltEt logisk flagg som avgjรธr om nivรฅene skal anses som ordnet, i den gitte rekkefรธlgen.
- nmaxEn valgfri รธvre grense for antall nivรฅer, nyttig for lange vektorer.
Eksempel:
La oss konvertere en tegnvektor til en faktor og bekrefte endringen med class().
# 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)
Utgang:
## [1] "character" ## [1] "factor"
Klassen byttet fra tegn til faktor, og ingenting ved de utskrevne verdiene endret seg. Det er viktig รฅ transformere en string til en faktorvariabel i R fรธr en maskinlรฆringsoppgave, fordi det er pรฅ hvilket tidspunkt kategoriene blir et fast, validert sett.
En kategorisk variabel i R kan deles inn i nominell kategorisk variabel og ordinal kategorisk variabel.
Nominell kategorisk variabel
En nominell kategorisk variabel har flere verdier, men rekkefรธlgen spiller ingen rolle. For eksempel mannlig eller kvinnelig. Nominelle kategoriske variabler i R har ingen rekkefรธlge.
# 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
Utgang:
## [1] blue red green white black yellow ## Levels: black blue green red white yellow
Fra factor_color kan vi ikke se noen rekkefรธlge. Nivรฅlisten er alfabetisk bare fordi det ikke ble oppgitt noe nivรฅargument, sรฅ R sorterte de unike verdiene selv. Denne sorteringen fรธlger den aktive sprรฅkinnstillingen i stedet for ren ASCII, noe som er en grunn til รฅ angi nivรฅene eksplisitt nรฅr rekkefรธlgen er viktig.
Ordinal kategorisk variabel
Ordinale kategoriske variabler har en naturlig ordning. Rangeringen kommer fra rekkefรธlgen til vektoren som sendes til nivรฅer argumentet, og ordered = TRUE forteller R at den skal behandle den sekvensen som en rangering i stedet for en ren liste. ร sette ordered = FALSE reverserer ikke rangeringen; den produserer ganske enkelt en vanlig uordnet faktor. For รฅ rangere fra hรธyest til lavest, reverser selve nivรฅvektoren.
Eksempel:
Vi kan bruke sammendrag for รฅ telle verdiene for hver faktorvariabel i R.
# 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
Utgang:
## [1] evening morning afternoon midday
midnight evening
Konsollen skriver ut verdiene fรธrst og rangeringen under. Den neste blokken รฅpnes med Levels-linjen, fortsatt kommentert ut, slik at rangeringen forblir synlig mens summary()-kallet legges til i den forrige koden.
## Levels: morning < midday < afternoon < evening < midnight # Append the line to above code # Count the number of occurence of each level summary(factor_day)
Utgang:
## morning midday afternoon evening midnight ## 1 1 1 2 1
R ordnet nivรฅet fra ยซmorgenยป til ยซmidnattยป som spesifisert i nivรฅargumentet. Fordi faktoren er ordnet, fungerer sammenligningsoperatorer som < og > ogsรฅ pรฅ den, noe de ikke gjรธr pรฅ den nominelle fargefaktoren ovenfor.
Kontinuerlige variabler
Kontinuerlige klassevariabler er standardverdien i R. De lagres som numeriske eller heltallsvariabler. Vi kan se det fra datasettet nedenfor. mtcars er et innebygd datasett. Det samler informasjon om ulike typer biler. Vi kan importere det ved รฅ bruke mtcars og sjekke klassen til variabelen mpg, mile per gallon. Den returnerer en numerisk verdi, som indikerer en kontinuerlig variabel.
dataset <- mtcars class(dataset$mpg)
Produksjon
## [1] "numeric"
Ikke alle numeriske kolonner er genuint kontinuerlige. I samme datasett inneholder cyl bare 4, 6 og 8, og am inneholder bare 0 og 1, sรฅ begge er kategorier som tilfeldigvis er lagret som tall. Konvertering av dem med factor() fรธr modellering hindrer R i รฅ behandle gapet mellom 4 og 6 sylindere som en mรฅlt mengde. Den motsatte bevegelsen, รฅ kutte en kontinuerlig kolonne i bรฅnd, hรฅndteres av cut().
Faktornivรฅer og etiketter i R
Levels-attributtet er den delen av en faktor du vil bruke mest tid pรฅ รฅ justere, fordi det styrer bรฅde hva som skrives ut og hva en modell behandler som grunnlinjen. Fire base R-hjelpere dekker nesten alle tilfeller.
| Funksjon | Hva det gjรธr | Typisk bruk |
|---|---|---|
| nivรฅer (f) | Leser eller erstatter nivรฅnavnene | Gi nytt navn til forkortelser til lesbare etiketter |
| nivรฅer(f) | Returnerer antall nivรฅer | Kontroll av at en kategori ikke eksploderte etter en sammenfรธyning |
| relevel(f, ref) | Flytter seg ett nivรฅ fremover | Velge grunnlinjen for en regresjon |
| drรฅpenivรฅer(f) | Fjerner nivรฅer med null observasjoner | Opprydding etter delsetting eller filtrering |
Blokken nedenfor gjelder alle fire for farge- og kjรธnnsfaktorene som ble opprettet tidligere.
# 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])
To detaljer er verdt รฅ huske pรฅ. Tildeling til levels() endrer navn etter posisjon, slik at en uoverensstemmende vektor i stillhet omdรธper feil kategori. Og et delsett beholder hvert opprinnelige nivรฅ inntil droplevels() kalles, og det er derfor en filtrert Dataramme kan fortsatt plotte tomme sรธyler. etiketter argumentet er annerledes igjen: det navngir nivรฅene ved opprettelse, og dupliserte etiketter slรฅr sammen flere inngangsverdier til ett nivรฅ.
Slik konverterer du en faktor til numerisk eller tegn i R
Dette er den vanligste faktorfeilen i R. Fordi en faktor lagrer heltallskoder, returnerer et kall med as.numeric() pรฅ den disse kodene i stedet for verdiene du kan se pรฅ skjermen. En faktor for รฅrene 2021 til 2023 kommer tilbake som 1, 2 og 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)
Den grunnleggende R-dokumentasjonen anbefaler as.numeric(levels(f))[f] som den riktige og litt raskere ruten, med as.numeric(as.character(f)) som den enklere รฅ lese ekvivalenten. Begge leser etiketten fรธrst og konverterer etterpรฅ.
- Faktor til karakteras.character(f) returnerer etikettene som ren tekst.
- Faktorisering til heltallskoderas.integer(f) eller unclass(f) nรฅr kodene er det du faktisk รธnsker.
- Karakter รฅ faktorisere: factor(x) eller den raskere snarveien as.factor(x).
- Numerisk til faktor: faktor(x) for diskrete koder, kutt(x, pauser) for kontinuerlige verdier som trenger bรฅnding.
รn sikkerhetsforanstaltning gjelder for alle. Hvis en verdi i x ikke vises i nivรฅvektoren, setter factor() elementet til NA i stedet for รฅ generere en feil, slik at et spredt mellomrom eller en forskjell i store bokstaver kan slette rader i det stille. Sammenligning av unike verdier fรธr og etter konverteringen, eller sortering av datarammen pรฅ den nye kolonnen, avslรธrer problemet raskt.
Faktor vs. tegn vs. numerisk i R: Nรฅr du skal bruke hver av dem
ร velge lagringsmodus tidlig sparer mye feilsรธking senere. Tabellen sammenligner de tre modusene en tekstkolonne eller koder kan ha.
| Eiendom | Faktor | Character | Numerisk |
|---|---|---|---|
| Lagret som | Heltallskoder pluss et nivรฅattributt | Strenger | Doubles eller heltall |
| Fast sett med verdier | Ja, definert av nivรฅer | Nei | Nei |
| Tilpasset visningsrekkefรธlge | Ja, gjennom nivรฅer | Kun alfabetisk | Kun numerisk |
| Aritmetisk | Ikke tillatt | Ikke tillatt | Lov |
| Modellkontraster | Bygget automatisk | Tvunget fรธrst | Behandlet som en mรฅling |
Bruk faktor nรฅr verdiene kommer fra en kjent, lukket liste, nรฅr visnings- eller rangeringsrekkefรธlgen har betydning, eller nรฅr kolonnen mater en modell eller en plottforklaring. karakter for fritekst, identifikatorer og alt du vil analysere eller bli med pรฅ, for eksempel navn, notater og koder som stadig kommer med nye verdier. Bruk numerisk bare nรฅr avstanden mellom to verdier er meningsfull.
Blokken nedenfor viser de raskeste mรฅtene รฅ sjekke hva du faktisk har.
# 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)
To vaner holder valget รฆrlig. Kjรธr sapply(df, class) etter hver import, fordi et enkelt bortkomment tegn i en numerisk kolonne gjรธr hele kolonnen om til tekst. Og konverter til en faktor sรฅ sent som mulig, etter at dataene er renset og slรฅtt sammen, slik at dplyr Sammenfรธyninger og filtre sammenligner fortsatt vanlige strenger i stedet for nivรฅsett som ikke samsvarer.
