Pakiet forcats, czyli jak pracować z czynnikami

Tworzymy czynniki

Czynniki tworzy się funkcją factor(). Domyślnie poziomy określane są jako wartości występujące w wektorze uporządkowane w kolejności leksykograficznej.

library(forcats)
library(readr)
(beta <- c("B", "E", "T", "A", "B", "I", "T"))
## [1] "B" "E" "T" "A" "B" "I" "T"
factor(beta)
## [1] B E T A B I T
## Levels: A B E I T

Zarówno w funkcji factor() jak i parse_factor() można określić wektor wszystkich poziomów czynnika.

(f <- factor(beta, levels = LETTERS))
## [1] B E T A B I T
## Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
(f <- parse_factor(beta, levels = LETTERS))
## [1] B E T A B I T
## Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Zmiana kolejności poziomów czynnika

Funkcja fct_inorder() zmienia kolejność czynników tak by odpowiadały kolejności występowania w zbiorze danych.

Funkcja fct_infreq() zmienia kolejność by odpowiadała częstości występowania wartości w wektorze.

(f2 <- fct_inorder(factor(beta)))
## [1] B E T A B I T
## Levels: B E T A I
(f3 <- fct_infreq(factor(beta)))
## [1] B E T A B I T
## Levels: B T A E I

Po co zmieniać kolejność czynników? Najczęściej po to by wpłynąć na działanie funkcji table(), która pokazuje częstości występowania poziomów zmiennej lub by wpłynąć na kolejność występowania poziomów na wykresach.

barplot(table(f))

plot of chunk barploty

barplot(table(f2))

plot of chunk barploty

barplot(table(f3))

plot of chunk barploty

Kolejność poziomów c.d.

Kolejne przykłady przeprowadzimy na kolumnie Marka ze zbioru danych auta2012.

library(Przewodnik)

head(auta2012$Marka)
## [1] Kia           Mitsubishi    Chevrolet     Volvo         Mercedes-Benz
## [6] Mercedes-Benz
## 106 Levels:  Acura Aixam AlfaRomeo Aro AstonMartin Audi Austin ... Zastawa

Funkcja fct_infreq() uporządkuje poziomy w kolejności częstości występowania. Funkcja fct_reorder() uporządkuje poziomy w kolejności średnich wartości innej zmiennej (w przykładzie poniżej w kolejności średniej ceny aut danej marki). Funkcja fct_relevel() zmienia kolejność poziomów, przesuwając wskazane poziomy na początek. Funkcja fct_rev() odwraca kolejność czynników.

head(fct_infreq(auta2012$Marka))
## [1] Kia           Mitsubishi    Chevrolet     Volvo         Mercedes-Benz
## [6] Mercedes-Benz
## 106 Levels: Volkswagen Opel Ford Renault Audi Mercedes-Benz BMW ... Zastawa
head(fct_reorder(auta2012$Marka, auta2012$Cena.w.PLN, .desc = TRUE))
## [1] Kia           Mitsubishi    Chevrolet     Volvo         Mercedes-Benz
## [6] Mercedes-Benz
## 106 Levels: Bugatti Maybach Lamborghini AstonMartin Ferrari ... Yugo
head(fct_relevel(auta2012$Marka, c("Volvo", "Fiat")))
## [1] Kia           Mitsubishi    Chevrolet     Volvo         Mercedes-Benz
## [6] Mercedes-Benz
## 106 Levels: Volvo Fiat  Acura Aixam AlfaRomeo Aro AstonMartin ... Zastawa
head(fct_rev(auta2012$Marka))
## [1] Kia           Mitsubishi    Chevrolet     Volvo         Mercedes-Benz
## [6] Mercedes-Benz
## 106 Levels: Zastawa Yugo Wolga Wartburg Warszawa Volvo ...

Zmiana poziomów

Funkcja fct_recode() pozwala na zamianę nazw poziomów. Funkcja fct_collapse() pozwala na agregację wybranych poziomów w jeden. Funkcja fct_lump() agreguje wszystkie rzadkie poziomy w jeden, pozostawiając jedynie określoną liczbę najczęstszych poziomów.

head(fct_recode(auta2012$Marka, "Alfa-Romeo" = "AlfaRomeo", "Aston-Martin" = "AstonMartin"))
## [1] Kia           Mitsubishi    Chevrolet     Volvo         Mercedes-Benz
## [6] Mercedes-Benz
## 106 Levels:  Acura Aixam Alfa-Romeo Aro Aston-Martin Audi ... Zastawa
auta2012$Marka %>%
  fct_collapse( "Niemieckie" = c("Audi", "Volkswagen", "BMW", "Opel", "Mercedes-Benz"),
                  "Francuskie" = c("Peugeot", "Citroen", "Renault"),
                  "Wloskie" = c("Fiat", "AlfaRomeo", "Ferrari")) %>%
  fct_infreq() %>%
  head()
## [1] Kia        Mitsubishi Chevrolet  Volvo      Niemieckie Niemieckie
## 98 Levels: Niemieckie Francuskie Ford Wloskie Skoda Toyota Seat ... Zastawa
auta2012$Marka %>%
  fct_lump(5) %>%
  head()
## [1] Other Other Other Other Other Other
## Levels: Audi Ford Opel Renault Volkswagen Other

Więcej informacji

R for Data Science