Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Learn Levels | Factors
R Introduction: Part I

book
Levels

Let's revisit the Levels label: you often see it when working with factor outputs. What if you want to view all possible values a factor can take?

To display all levels of a factor, which are the distinct categorical values it holds, use the levels() function with the factor variable as the argument. Let's take a look at an example:

# Vector of currencies as factor
curr_f <- factor(c('USD', 'EUR', 'AUD', 'NOK',
'CHF', 'EUR', 'AUD', 'EUR'))
# Output all the levels
levels(curr_f)
12345
# Vector of currencies as factor curr_f <- factor(c('USD', 'EUR', 'AUD', 'NOK', 'CHF', 'EUR', 'AUD', 'EUR')) # Output all the levels levels(curr_f)
copy

Interestingly, you can rearrange these levels without altering the actual data. Nonetheless, we sometimes encounter ordered factor variables. Take height, for instance: one might be classified as tall, medium, or short. This ordering implies tall > medium > short.

R accommodates this by allowing you to specify the ordered parameter as TRUE. This organizes the variables alphabetically for textual values or numerically for values that are numbers.

While numerical ordering is typically straightforward and desired, alphabetical ordering might not be appropriate. To establish a specific order, you also need to set the labels parameter to a vector that lists your values in ascending order.

Let's look at an example for clarity:

# Factors with no ordering
factor(c('USD', 'EUR', 'AUD', 'NOK',
'CHF', 'EUR', 'AUD', 'EUR'))
# Factors with ordering without labels parameter
factor(c('USD', 'EUR', 'AUD', 'NOK',
'CHF', 'EUR', 'AUD', 'EUR'), ordered = T)
# Factors with ordering with labels parameter
factor(c('USD', 'EUR', 'AUD', 'NOK',
'CHF', 'EUR', 'AUD', 'EUR'), ordered = T,
labels = c('USD', 'EUR', 'CHF', 'AUD', 'NOK'))
12345678910
# Factors with no ordering factor(c('USD', 'EUR', 'AUD', 'NOK', 'CHF', 'EUR', 'AUD', 'EUR')) # Factors with ordering without labels parameter factor(c('USD', 'EUR', 'AUD', 'NOK', 'CHF', 'EUR', 'AUD', 'EUR'), ordered = T) # Factors with ordering with labels parameter factor(c('USD', 'EUR', 'AUD', 'NOK', 'CHF', 'EUR', 'AUD', 'EUR'), ordered = T, labels = c('USD', 'EUR', 'CHF', 'AUD', 'NOK'))
copy

Observing the difference is instructive. Try it out for yourself!

Task

Swipe to start coding

Let's say you have a vector of grades ranging from 'A' to 'F'. You're tasked with converting this into an ordered factor with the sequence 'F < D < C < B < A':

  1. Convert the grades vector to a factor, capturing the required order, and store it in the grades_f variable.
  2. Display the entire grades_f variable.

Solution

# Initial vector of grades
grades <- c("A","F","C","C","F","A","F","F","B",
"C","D","D","B","A","B","D","F","A",
"B","A","A","C","F","A","D","C")
# Convert grades into factor type considering the order
grades_f <- factor(grades, labels = c('F', 'D', 'C', 'B', 'A'), ordered = T)
# Output the value of transformed grades
grades_f

Everything was clear?

How can we improve it?

Thanks for your feedback!

Section 3. Chapter 3
# Initial vector of grades
grades <- c("A","F","C","C","F","A","F","F","B",
"C","D","D","B","A","B","D","F","A",
"B","A","A","C","F","A","D","C")
# Convert grades into factor type considering the order
___ <- ___(___, labels = ___, ordered = ___)
# Output the value of transformed grades
___
toggle bottom row
some-alt