按字母和数字排序

时间:2017-08-16 06:20:29

标签: r

我有一个DF$vector,如下所示:

A10 A50
C1 C4
B1
A7
C3
B1 B4

我想方设法订购如下:

A10 A50
A7
B1 B4
B1
C1 C4
C3

我尝试使用gsub

vector[order(gsub("([A-Z]+)([0-9]+)", "\\1", vector), 
             as.numeric(gsub("([A-Z]+)([0-9]+)", "\\2", vector)))]

但它没有归还我想要的东西。 感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

我们可以使用order

中的base R
df1[order(sub("\\d+", "", df1[,1]), as.numeric(sub("\\D+", "", df1[,1])), df1[,2] == ""),]
#  A10 A50
#3  A7    
#5  B1  B4
#2  B1    
#1  C1  C4
#4  C3    

数据

df1 <-structure(list(A10 = c("C1", "B1", "A7", "C3", "B1"), A50 = c("C4", 
 "", "", "", "B4")), .Names = c("A10", "A50"), class = "data.frame", 
 row.names = c(NA, -5L))

答案 1 :(得分:0)

在编程语言中,字母被认为在数量上正在增加。因此,A被认为 <{1}}等。因此,要订购以上内容,只需使用代码:

B