R:使用自定义顺序按名称重新排序数字向量
R: Re-order numeric vector by name using 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
如您所见,向量未按月顺序排列
期望的输出
我希望使用名称按月顺序重新排序此字符向量,即 jan, feb, mar, apr, may...
这怎么可能?
注意:我正在寻找一种可用于所有 names/character 字符串的方法,而不是专门用于日期对象的方法
我们可以将'x'的names
转换为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
指定 levels
到 factor
的转换可以应用于自定义顺序中的任何字符向量,否则,默认情况下,排序基于字母顺序,即
x[order(names(x))]
假设,如果要说的顺序是 'jan'、'mar'、'apr'、'may'、'feb',请将其用作 levels
在 factor
调用中
x[order(factor(names(x), levels = c('jan', 'mar', 'apr', 'may', 'feb')))]
由于 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
我有一个数字向量,想使用自定义顺序按名称重新排序。
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...
这怎么可能?
注意:我正在寻找一种可用于所有 names/character 字符串的方法,而不是专门用于日期对象的方法
我们可以将'x'的names
转换为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
指定 levels
到 factor
的转换可以应用于自定义顺序中的任何字符向量,否则,默认情况下,排序基于字母顺序,即
x[order(names(x))]
假设,如果要说的顺序是 'jan'、'mar'、'apr'、'may'、'feb',请将其用作 levels
在 factor
调用中
x[order(factor(names(x), levels = c('jan', 'mar', 'apr', 'may', 'feb')))]
由于 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