Hur konvertera en faktor i R

October 6

Ibland behöver du explicit konvertera faktorer till antingen text eller siffror. För att göra detta använder du funktionerna as.character () eller as.numeric (). Först konvertera dina riktningar vektor i en faktor som kallas directions.factor (som ni såg tidigare):

> Riktningar <- c ("North", "East", "South", "South")
> Directions.factor <- faktor (riktningar)
> Directions.factor
[1] North East South South
Nivåer: East North South

Använd as.character () för att konvertera en faktor till en karaktär vektor:

> As.character (directions.factor)
[1] "North" "East" "South" "Södra"

Använd as.numeric () för att konvertera en faktor till ett numeriskt vektor. Observera att detta kommer att återvända sifferkoder som motsvarar faktornivåerna. Till exempel, "East" motsvarar 1, "Nord" motsvarar 2, och så vidare:

> As.numeric (directions.factor)
[1] 2 1 3 3

Var mycket försiktig när du konverterar faktorer med numeriska nivåer till ett numeriskt vektor. Resultaten kanske inte är vad du förväntar dig.

Tänk dig till exempel att du har en vektor som anger vissa prov poängen med värdena c (9, 8, 10, 8, 9), vilket du konvertera till en faktor:

> Siffror <- faktor (c (9, 8, 10, 8, 9))

Att titta på den interna representationen av siffror, användning str ():

> str (siffror)
Faktor w / 3 nivåer "8", "9", "10": 2 1 3 1 2

Detta tyder på att R lagrar värdena som c (2, 1, 3, 1, 2) med tillhörande nivåer av c ("8", "9", "10").

Hur konvertera en faktor i R

Om du vill konvertera tal till en karaktär vektor, resultaten är ganska mycket som du förväntar dig:

> as.character (siffror)
[1] "9" "8" "10" "8" "9"

Men om du bara använder som. numeriska (), är ditt resultat en vektor av de interna representationer nivå för din faktor och inte de ursprungliga värdena:

> as.numeric (siffror)
[1] 2 1 3 1 2

R hjälp på? Faktor beskriver en lösning på detta problem. Lösningen är att indexera nivåer genom faktorn själv, och sedan konvertera till numeriska:

> As.numeric (as.character (siffror))
[1] 9 8 10 8 9

Detta är ett exempel på kapslade funktioner i R, där du passerar resultatet av en funktion till en andra funktion. Kapslade funktioner är lite som de ryska dockorna, där varje leksak är inne nästa:

  • Den inre funktion, as.character (siffror), innehåller texten c ("8", "9", "10").
  • Den yttre funktion, as.numeric (...), gör den slutliga omvandlingen till c (9, 8, 10, 8, 9).