R:使用自定义订单

时间:2016-08-21 14:23:47

标签: r vector numeric

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

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

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

期望的输出

我希望使用名称(即jan, feb, mar, apr, may...

)按月顺序重新排序此字符向量

这怎么可能?

注意:我正在使用一个可用于所有名称/字符串的方法,而不是专门用于日期对象

1 个答案:

答案 0 :(得分:2)

我们可以将names的'x'转换为factor并将levels设置为month.abb小写,应用order并获取按顺序'x'。

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

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

levels

假设,如果想要命令,'jan','mar','apr','may','feb',请在x[order(names(x))] 调用中将其用作levels < / p>

factor

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

x[order(factor(names(x), levels = c('jan', 'mar', 'apr', 'may', 'feb')))]