The following code creates a vector called sizes from small to extra-large
set.seed(23)
sizes<-sample(c("small","medium","large","extra-large"),50,replace=T)
Here I made the attempt to create ordered levels by first creating the factor and then use order to the factor I have created. When displaying the output, I see that they are separated by size. How can I create four order pairs, where small is less than medium, the medium is less than large, and large is less than extra-large?
sizes_as_factor = factor(x=c(sizes))
sizes[order(sizes_as_factor)]
2 Answers
By supplying the factor levels manually in the desired order:
sizes_as_factor <- factor(sizes, levels = c("small", "medium", "large", "extra-large"))
Another option is to make the factor first and then sample from it. It will produce a factor that retains the levels, another potentially beneficial aspect of factors.
sizes <- c("small","medium","large","extra-large")
size_fct <- factor(sizes, levels = sizes, ordered = T)
set.seed(23)
size_samp <- sample(size_fct, 50, T)
size_samp
#> [1] small extra-large extra-large large extra-large small
#> [7] large large small medium extra-large small
#> [13] large small small extra-large extra-large large
#> [19] medium medium large medium small medium
#> [25] extra-large medium small medium large medium
#> [31] large large medium large medium extra-large
#> [37] small small large extra-large large large
#> [43] extra-large small large medium extra-large small
#> [49] large medium
#> Levels: small < medium < large < extra-large
Created on 2021-03-29 by the reprex package (v1.0.0)