我有一个如下所示的数据框:
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 ..)。 我该如何解决这个问题?
答案 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
中说明