如何在R中按字母顺序排序?

Posted

技术标签:

【中文标题】如何在R中按字母顺序排序?【英文标题】:How to sort alphabetically in R? 【发布时间】:2014-04-18 18:34:23 【问题描述】:

我的文件格式为:

ada1
ada2
ada3
....
ada10
ada11
ada12

不幸的是,当我写出 a10 时,a11 和 a12 出现在 a2 之前。你能帮我按字母顺序排序吗?

#

编辑

现在,我有数千个这样的文件。基本上就是xyz1-12、abc1-12等

我使用以下方法获取所有文件:

GG <- grep("*.txt", list.files(), value = TRUE)

所以我不能手动输入“ada”。

【问题讨论】:

是否可以重命名示例中的文件? 您显示的不是字母排序。您可以使用 gtools 包中的mixedsort 我不想重命名实际文件。 【参考方案1】:

如果总是有三个字符,您可以按这些字符独立排序,然后对字符串的其余部分进行数字排序:

GG <- paste0(c('ada', 'xyz'), 1:20) # Synthesis of data similar to what your command would give

order 与多个参数一起使用会给出向量的排列,然后按该排列进行索引会以所需的排序顺序返回数据:

GG[order(substring(GG, 1, 3), as.numeric(substring(GG, 4)))]
 [1] "ada1"  "ada3"  "ada5"  "ada7"  "ada9"  "ada11" "ada13" "ada15" "ada17" "ada19" "xyz2"  "xyz4"  "xyz6"  "xyz8"  "xyz10"
[16] "xyz12" "xyz14" "xyz16" "xyz18" "xyz20"

【讨论】:

我使用 GG 您能解释一下吗?我没明白。谢谢 对不起,我误读了您的评论。我在表达式中替换了GG。听起来这就是你想要的。 对不起,我可能没有正确解释。这不是我想要的。基本上,GG 给了我文件夹中所有我想要排序的文件的名称。我不想像你一样手动插入'ada','xyz'。我怎么能做到?谢谢 谢谢。混合排序很简单。【参考方案2】:

使用包gtools的另一种方式:

require(gtools)
x <- paste0('a', 1:12)
mixedsort(x)
[1] "a1"  "a2"  "a3"  "a4"  "a5"  "a6"  "a7"  "a8"  "a9"  "a10" "a11" "a12"

【讨论】:

谢谢。我添加了一些信息。我无法手动添加,因为我有数千个文件。如何调整您的代码? 我不明白你为什么不能只使用mixedsort(GG) @GeekunaMatata 他只是创建了一组“测试”名称。只需在您的文件名集合上运行 mixedsort【参考方案3】:

如果您不能将它们的名称更改为更好的名称(即 ada001、ada002...),那么您可以创建一个双索引。我假设fnames 是一个带有文件名的向量,并且数字前面只有固定数量的字母。

alpha <- substr(fnames, 1, 3)
num <- as.integer(substr(fnames, 4, nchar(fnames)))

o <- order(alpha, num)   ## that's your sorting vector

您可以修改此过程以适应不同数量的字母,使用正则表达式来查找拆分。

【讨论】:

【参考方案4】:

如果您可以更改文件名,您可以执行以下操作:

names0 <- paste0("a", 1:20)
temp <- strsplit(names0, "a")
ind <- sapply(temp, "[[", 2)
names1 <- paste0("a", sprintf("%03d", as.numeric(ind)))

> names1
[1] "a001" "a002" "a003" "a004" "a005" "a006"
[7] "a007" "a008" "a009" "a010" "a011" "a012"
[13] "a013" "a014" "a015" "a016" "a017" "a018"
[19] "a019" "a020"

您可能需要根据此answer 调整对sprintf 的调用。

澄清一下,使用file.rename,重命名所有文件非常容易。

【讨论】:

以上是关于如何在R中按字母顺序排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中按字母顺序对记录进行排序

如何在 swift 中按字母顺序对 JSON 字符串进行排序?

如何在pyspark中按字母顺序对嵌套结构的列进行排序?

如何在数据库表中按字母顺序对列进行排序? [关闭]

如何在 jquery 选择的下拉列表中按字母顺序重新排序 <options>

如何在 iOS 中按字母顺序对 MediaQuery 的 ArtistQuery 数组进行排序