R中的混合序列数据帧

时间:2016-09-01 11:26:50

标签: r sorting mixed

我有一个如下所示的数据框:

a = c("1A","10A","11A","2B","2C","22C","3A","3B")
b= c(1,2,3,4,5,6,7,8)
ab = data.frame(a,b)

我希望根据列a对其进行排序。我尝试了混合订单

library(gtools)
ab[mixedorder(ab$a),]

但我不喜欢'得到我想要的结果(1A,2B,2C,3A,3B ..)。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

我刚刚拆分了这个专栏。如果您想要ID的数字部分的数字顺序,您可能应该将这些数字作为数字列。

ab$a1 <- as.numeric(gsub("[[:alpha:]+]", "", ab$a))
ab$a2 <- gsub("\\d+", "", ab$a)

ab[order(ab$a1, ab$a2),]
#    a b a1 a2
#1  1A 1  1  A
#4  2B 4  2  B
#5  2C 5  2  C
#7  3A 7  3  A
#8  3B 8  3  B
#2 10A 2 10  A
#3 11A 3 11  A
#6 22C 6 22  C

答案 1 :(得分:2)

我们需要转换为character类(因为'a'列为factor基于data.frame调用中的默认选项,即stringsAsFactors=TRUE

ab[mixedorder(as.character(ab$a)),]
#    a b
#1  1A 1
#4  2B 4
#5  2C 5
#7  3A 7
#8  3B 8
#2 10A 2
#3 11A 3
#6 22C 6

其他选项也在here

中说明