[1] "character"
[1] "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"
[7] "Sunday"
Defining Categorical Types
In this brief presentation, we’ll be introducing the following items:
Unique and individual grouping that can be applied to a study design.
character typeThe function sample() allows us to take a random sample of elements from a vector of potential values.
However, if we want a large number items, we can have them with or without replacement.
We’ll pretend we have a bunch of data related to the day of the week.
Length Class Mode
40 character character
[1] "Thursday" "Sunday" "Thursday" "Monday" "Sunday" "Thursday"
[7] "Wednesday" "Thursday" "Thursday" "Thursday" "Thursday" "Monday"
[13] "Tuesday" "Tuesday" "Friday" "Wednesday" "Friday" "Sunday"
[19] "Monday" "Saturday" "Monday" "Monday" "Monday" "Thursday"
[25] "Thursday" "Sunday" "Tuesday" "Friday" "Saturday" "Tuesday"
[31] "Thursday" "Sunday" "Sunday" "Monday" "Sunday" "Friday"
[37] "Monday" "Monday" "Friday" "Saturday"
factor [1] Thursday Sunday Thursday Monday Sunday Thursday Wednesday
[8] Thursday Thursday Thursday Thursday Monday Tuesday Tuesday
[15] Friday Wednesday Friday Sunday Monday Saturday Monday
[22] Monday Monday Thursday Thursday Sunday Tuesday Friday
[29] Saturday Tuesday Thursday Sunday Sunday Monday Sunday
[36] Friday Monday Monday Friday Saturday
Levels: Friday Monday Saturday Sunday Thursday Tuesday Wednesday
Each factor variable is defined by the levels that constitute the data. This is a .red[finite] set of unique values
If a factor is not ordinal, it does nota allow the use relational comparison operators.
Where ordination matters:
Fertilizer Treatments in KG of N2 per hectare: 10 kg N2, 20 N2, 30 N2,
Days of the Week: Friday is not followed by Monday,
Life History Stage: seed, seedling, juvenile, adult, etc.
Where ordination is irrelevant:
River
State or Region
Sample Location
[1] Thursday Sunday Thursday Monday Sunday Thursday Wednesday
[8] Thursday Thursday Thursday Thursday Monday Tuesday Tuesday
[15] Friday Wednesday Friday Sunday Monday Saturday Monday
[22] Monday Monday Thursday Thursday Sunday Tuesday Friday
[29] Saturday Tuesday Thursday Sunday Sunday Monday Sunday
[36] Friday Monday Monday Friday Saturday
7 Levels: Friday < Monday < Saturday < Sunday < Thursday < ... < Wednesday
The problem is that the default ordering is actually alphabetical!
Specifying the Order of Ordinal Factors
[1] Thursday Sunday Thursday Monday Sunday Thursday Wednesday
[8] Thursday Thursday Thursday Thursday Monday Tuesday Tuesday
[15] Friday Wednesday Friday Sunday Monday Saturday Monday
[22] Monday Monday Thursday Thursday Sunday Tuesday Friday
[29] Saturday Tuesday Thursday Sunday Sunday Monday Sunday
[36] Friday Monday Monday Friday Saturday
7 Levels: Monday < Tuesday < Wednesday < Thursday < Friday < ... < Sunday
[1] Monday Monday Monday Monday Monday Monday Monday
[8] Monday Monday Tuesday Tuesday Tuesday Tuesday Wednesday
[15] Wednesday Thursday Thursday Thursday Thursday Thursday Thursday
[22] Thursday Thursday Thursday Thursday Friday Friday Friday
[29] Friday Friday Saturday Saturday Saturday Sunday Sunday
[36] Sunday Sunday Sunday Sunday Sunday
7 Levels: Monday < Tuesday < Wednesday < Thursday < Friday < ... < Sunday
You cannot assign a value to a factor that is not one of the pre-defined levels.
forcats forcats libraryPart of the tidyverse group of packages.
This library has a lot of helper functions that make working with factors a bit easier. I’m going to give you a few examples here but strongly encourage you to look a the cheat sheet for all the other options.
There is a StarWars API at https://swapi.py4e.com, see ?starwars to learn more about the data it contains. Let’s take this data to play with the library.
[1] Tatooine Tatooine Naboo Tatooine Alderaan
[6] Tatooine Tatooine Tatooine Tatooine Stewjon
[11] Tatooine Kashyyyk Corellia Rodia Nal Hutta
[16] Corellia Bestine IV Naboo Kamino Trandosha
[21] Socorro Bespin Mon Cala Endor Sullust
[26] Cato Neimoidia Naboo Naboo Naboo Malastare
[31] Dathomir Ryloth Aleen Minor Vulpter Tund
[36] Haruun Kal Cerea Glee Anselm Coruscant Dorin
[41] Naboo Geonosis Mirial Mirial Serenno
[46] Concord Dawn Zolan Ojom Kamino Skako
[51] Shili Kalee Kashyyyk Alderaan Umbara
[56] Utapau
39 Levels: Alderaan Aleen Minor Bespin Bestine IV Cato Neimoidia ... Zolan
[1] Tatooine Tatooine Naboo Tatooine Alderaan
[6] Tatooine Tatooine Tatooine Tatooine Stewjon
[11] Tatooine Kashyyyk Corellia Rodia Nal Hutta
[16] Corellia Bestine IV Naboo Kamino Trandosha
[21] Socorro Bespin Mon Cala Endor Sullust
[26] Cato Neimoidia Naboo Naboo Naboo Malastare
[31] Dathomir Ryloth Aleen Minor Vulpter Tund
[36] Haruun Kal Cerea Glee Anselm Coruscant Dorin
[41] Naboo Geonosis Mirial Mirial Serenno
[46] Concord Dawn Zolan Ojom Kamino Skako
[51] Shili Kalee Kashyyyk Alderaan Umbara
[56] Utapau
39 Levels: Alderaan < Aleen Minor < Bespin < Bestine IV < ... < Zolan
data.frameNew Value = Old Value
starwars |>
filter( !is.na(homeworld) ) |>
mutate( homeworld = fct_collapse( homeworld,
"<---- MEH ---->" = c("Bestine IV","Cerea", "Dorin","Miral", "Sullust"),
"¯\\_(ツ)_/¯" = c("Umbara","Kashyyyk","Concord Dawn"),
"YES YES YES YES YSE YSE " = c("Nal Hutta","Ojom","Rodia","Ryloth","Serenno","Shili","Skako","Socorro")
)) |>
ggplot( aes(x=homeworld) ) +
geom_bar() +
coord_flip()# A tibble: 48 × 2
homeworld film
<chr> <int>
1 Tatooine 8
2 Naboo 6
3 Alderaan 3
4 Coruscant 3
5 Corellia 2
6 Kamino 2
7 Kashyyyk 2
8 Mirial 2
9 Ryloth 2
10 Aleen Minor 1
# ℹ 38 more rows