R:使用自定义顺序按名称重新排序数字向量

G. *_*Gip 5 r numeric vector

我有一个数字向量,想使用自定义顺序按名称重新排序。

x <- sample(1:20, 5)
names(x) <- c("feb", "may", "mar", "jan", "apr")
x
feb may mar jan apr 
  7  10   5  13  11 
Run Code Online (Sandbox Code Playgroud)

如您所见,向量不是按月顺序排列的

期望输出

我希望使用名称通过月份顺序重新排序这个字符向量,即 jan, feb, mar, apr, may...

这怎么可能?

注意:我追求的是一种可以用于所有名称/字符串的方法,而不是专门用于日期对象

akr*_*run 8

我们可以转换names的“X”来factor和settting的levelsmonth.abb小写字母,应用order并得到了“X”的顺序。

x[order(factor(names(x), levels=tolower(month.abb)))]
jan feb mar apr may 
 13  7   5  11  10 
Run Code Online (Sandbox Code Playgroud)

factorwith levelsspecified的转换可以应用于自定义顺序中的任何字符向量,否则,默认情况下,排序基于字母顺序,即

x[order(names(x))]
Run Code Online (Sandbox Code Playgroud)

假设,如果希望命令为“jan”、“mar”、“apr”、“may”、“feb”,请levelsfactor调用中使用

x[order(factor(names(x), levels = c('jan', 'mar', 'apr', 'may', 'feb')))]
Run Code Online (Sandbox Code Playgroud)

由于 OP 在评论中以自定义顺序发布了另一个向量

x1 <- c(icecream = 3, jelly = 4, fruit = 5)
x1[order(factor(names(x1), levels = c("jelly", "fruit", "icecream")))]
#   jelly    fruit icecream 
#      4        5        3 
Run Code Online (Sandbox Code Playgroud)

  • @G.Gip 字符元素按字母顺序排列,所以如果这是您想要的,`x[order(names(x))]`,但您的示例似乎基于月份名称的自定义顺序。如果是自定义订单,那么`factor`、`levels` 方法是通用的。 (2认同)