【发布时间】:2015-06-21 00:25:30
【问题描述】:
我正在寻找有关使用字母数字组件对data.frame 进行排序的建议:
假设我们有:
A = c("A1","A10","A11","A2")
B = c(1,2,3,4)
C = data.frame(A,B)
我怎样才能以我们最后的方式对 C data.frame 进行排序:
C$A 的顺序为:“A1”、“A2”、“A10”、“A11”。
【问题讨论】:
我正在寻找有关使用字母数字组件对data.frame 进行排序的建议:
假设我们有:
A = c("A1","A10","A11","A2")
B = c(1,2,3,4)
C = data.frame(A,B)
我怎样才能以我们最后的方式对 C data.frame 进行排序:
C$A 的顺序为:“A1”、“A2”、“A10”、“A11”。
【问题讨论】:
假设每个条目的开头只有一个字母组成部分,一个合理的策略是先按该字母(使用字符(字母)排序)排序,然后按数字组成部分(使用数字排序)。
(我假设您可能想在字母不固定的情况下使用它。)
你可以这样做:
C[order(substr(A,1,1), as.numeric(substr(A, 2,length(A)))),]
如果字符串比 1 个字母后跟数字更通用,您可以使用正则表达式来选择合适的字符串进行排序。
【讨论】:
您可以尝试“gtools”包中的mixedorder。它的作用如下:
> library(gtools)
> mixedorder(as.character(C$A))
[1] 1 4 2 3
所以,按“A”列排序:
C[mixedorder(as.character(C$A)), ]
## A B
## 1 A1 1
## 4 A2 4
## 2 A10 2
## 3 A11 3
您还可以通过以下方式获得相同的排序:
order(nchar(as.character(C$A)))
## [1] 1 4 2 3
【讨论】: