I have a a numeric vector and want to re-order by name, using a custom order.
x <- sample(1:20, 5)
names(x) <- c("feb", "may", "mar", "jan", "apr")
x
feb may mar jan apr
7 10 5 13 11
As you can see, the vectors are not in month order
I wish to re-order this character vector through month order using the names, i.e. jan, feb, mar, apr, may...
How is this possible?
note: I am after a method that can be used on all names/character strings, rather than specifically date objects
We can convert the names of 'x' to factor and settting the levels to the month.abb in lowercase, apply the order and get the 'x' in that order.
x[order(factor(names(x), levels=tolower(month.abb)))]
jan feb mar apr may
13 7 5 11 10
The conversion to factor with levels specified can be applied to any character vector in a custom order, otherwise, by default, the ordering is based on alphabetical order i.e.
x[order(names(x))]
Suppose, if want the order to be say, 'jan', 'mar', 'apr', 'may', 'feb', use that as levels in the factor call
x[order(factor(names(x), levels = c('jan', 'mar', 'apr', 'may', 'feb')))]
As the OP posted another vector in a custom order in the comments
x1 <- c(icecream = 3, jelly = 4, fruit = 5)
x1[order(factor(names(x1), levels = c("jelly", "fruit", "icecream")))]
# jelly fruit icecream
# 4 5 3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With