![](/img/trans.png)
[英]How to sort a character vector where elements contain letters and numbers?
[英]How to sort a character vector where elements contain numbers and letters in R?
我的字符數組如下:注意:數組已更改。 抱歉,是我的錯
m <- c("VI-2005","III-2005","II-2005","I-2005","III-2006","II-2006","I-2006","VI-2006","IV-2007","III-2007","II-2007","I-2007")
我有羅馬數字和年份。 我想按降序對它進行排序,這樣我就有一個像這樣的 output :
I-2005
II-2005
III-2005
IV-2005
I-2006
II-2006
III-2006
IV-2006
I-2007
II-2007
III-2007
IV-2007
我嘗試了“ mixedsort
”package 中的混合排序:
> # install.packages("gtools") ## Uncomment if not already installed
> library(gtools)
> mixedsort(m)
但它不按羅馬數字排序。 感謝您的閱讀!
拆分輸入並將羅馬數字轉換為一個因子:
library(data.table)
n <- tstrsplit(m, "-")
n[[1]] <- ordered(n[[1]], levels = c("I", "II", "III", "IV",
"V", "VI", "VII", "VIII",
"IX", "X", "XI", "XII"))
n[[2]] <- as.integer(n[[2]])
n <- rev(n)
m[do.call(order, n)]
#[1] "I-2005" "I-2005" "II-2005" "III-2005" "VI-2005" "VI-2005" "II-2006" "III-2006"
#[9] "I-2007" "II-2007" "III-2007" "IV-2007"
編輯:
如果你想用它來繪圖或建模,把m
變成一個有序因子:
library(data.table)
n <- tstrsplit(unique(m), "-")
n[[1]] <- ordered(n[[1]], levels = c("I", "II", "III", "IV",
"V", "VI", "VII", "VIII",
"IX", "X", "XI", "XII"))
n[[2]] <- as.integer(n[[2]])
n <- rev(n)
m <- ordered(m, levels = unique(m)[do.call(order, n)])
您可以使用as.roman
將羅馬數字轉換為其類型,然后使用order
訂購 dataframe。
data <- strcapture('(\\w+)-(\\d+)', m,
proto = list(roman = character(), number = numeric()))
data$roman <- as.roman(data$roman)
data <- data[do.call(order, rev(data)), ]
# roman number
#4 I 2005
#7 I 2005
#3 II 2005
#2 III 2005
#1 VI 2005
#8 VI 2005
#6 II 2006
#5 III 2006
#12 I 2007
#11 II 2007
#10 III 2007
#9 IV 2007
如果你想找回字符串,你可以粘貼它:
do.call(paste, c(data, sep = '-'))
# [1] "I-2005" "I-2005" "II-2005" "III-2005" "VI-2005" "VI-2005" "II-2006"
# [8] "III-2006" "I-2007" "II-2007" "III-2007" "IV-2007"
您也可以使用as.roman
function。 這將確保排序時數字 6 即VI
在 9 即IX
之前
s <- read.table(text=m, sep="-")
with(s, do.call(paste, c(sep="-", s[order(V2, as.roman(V1)), ])))
[1] "I-2005" "I-2005" "II-2005" "III-2005" "VI-2005" "VI-2005" "II-2006" "III-2006"
[9] "I-2007" "II-2007" "III-2007" "IV-2007"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.