我在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"
如何在数字之前按字母排序?
答案 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"