基于长度对字符串向量进行排序的R基础函数

12

我想知道R基础包中是否有一个已经存在的函数可以按照每个元素的长度和字典顺序对字符串向量进行排序。例如,在一些保存年龄组的向量上使用sort函数后,你会得到:

v <- c("00-04", "05-09", "10-14", "100-104", "105-109", "110-114", "15-19", "20-24"..etc)

我希望拥有以下内容:

v <- c("00-04", "05-09", "10-14", "15-19", "20-24"..etc.. "100-104", "105-109", "110-114")

3
这段代码的意思是:按照字符串长度对向量v进行排序,并返回排序后的向量。 - A5C1D2H2I1M1N2O1R2T1
好的。谢谢。这样做就可以了,不需要任何其他库 :] - Marius
2个回答

29

只需使用order

v[order(nchar(v), v)]

## [1] "00-04"   "05-09"   "10-14"   "15-19"   "20-24"   "100-104" "105-109" "110-114"

那就是你在寻找的东西吗?


好的。尽管安南达最先提供了解决方案,但我会接受这个作为“官方”答案。谢谢。 - Marius
@Marius,没问题。我当时在用手机,无法验证我的答案,而且我不喜欢发布我不确定的答案。 :-) - A5C1D2H2I1M1N2O1R2T1

3

这个功能不在R的基础模块中,但它可以将字符串分成数字和字符部分并进行适当排序:

v <- c("00-04", "05-09", "10-14", "100-104", "105-109", "110-114", "15-19", "20-24")
library(gtools)
mixedsort(v)
#[1] "00-04"   "05-09"   "10-14"   "15-19"   "20-24"   "100-104" "105-109" "110-114"

如果您不想加载/依赖于gtools包,您可以随时复制其中定义的mixedorder函数的代码。


我选择了 Ananda 给出的答案,因为它不需要另一个库。也感谢您的答案。 - Marius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接