按字母顺序按字母顺序排序数据表,然后按R中的数字值排序

时间:2016-06-14 14:06:08

标签: r sorting datatable

我在R中有一个数据表,我希望按字母顺序按数字排序单个列,然后按数字排序。

例如,该列可能具有类似的条目:

v1<- c("All", "1.2 - Social Care", "2.1 - Science", "1.1 - Health")

使用订单功能

v1[order(v1)]

导致

[1] "1.1 - Health"      "1.2 - Social Care" "2.1 - Science"     "All"

然而,我想要的是:

"All"     "1.1 - Health"    "1.2 - Social Care"    "2.1 - Science"

如何在数字之前按字母排序?

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来标识哪些条目以数字开头并将其放在最后:

w = grep("^[0-9]", v1)
c(sort(v1[-w]), sort(v1[w]))
# "All"               "1.1 - Health"      "1.2 - Social Care" "2.1 - Science" 

有关R中正则表达式的更多信息,请键入?regex?grep。或者,您可以构建w = which(substr(v1,1,1) %in% 0:9),类似于@ MikeyMike的答案。

答案 1 :(得分:0)

另一种方法是添加&#34; 0 - &#34;在以字母开头的条目前面:

v1[grep("^[a-zA-Z]", v1)] <- paste0("0 - ", v1[grep("^[a-zA-Z]", v1)])

sort(v1)
[1] "0 - All"           "1.1 - Health"      "1.2 - Social Care" "2.1 - Science"

答案 2 :(得分:0)

另一种方法是直接使用order函数首先对字符串的第一个字符是否为数字进行排序,然后按照v1上的正常排序进行排序。

v1[order(-grepl("[[:alpha:]]", substr(v1,1,1)), v1)]

[1] "All"               "1.1 - Health"      "1.2 - Social Care" "2.1 - Science"  
相关问题