Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中按字母顺序排序?_R - Fatal编程技术网

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

如何在R中按字母顺序排序?,r,R,我的文件的格式如下: ada1 ada2 ada3 .... ada10 ada11 ada12 不幸的是,当我写出a10时,a11和a12在a2之前。你能帮我按字母顺序把它分类吗 # 编辑 现在,我有数千个这样的文件。基本上,xyz1-12、abc1-12等 我使用以下方法获取所有文件: GG <- grep("*.txt", list.files(), value = TRUE) GG如果始终有三个字符,则可以按这些字符独立排序,然后对字符串的其余部分进行数字排序: GG <

我的文件的格式如下:

ada1
ada2
ada3
....
ada10
ada11
ada12
不幸的是,当我写出a10时,a11和a12在a2之前。你能帮我按字母顺序把它分类吗

# 编辑

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

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

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

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

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

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

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

使用软件包
gtools
的另一种方法:

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

x使用包
gtools的另一种方法:

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

如果你不能把他们的名字改成更好的名字(即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

alpha如果您不能将它们的名称更改为更好的名称(即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

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

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"

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

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"


names0是否可以重命名示例中的文件?您显示的不是字母排序。您可以使用package gtools中的
mixedsort
。我不希望重命名实际文件。在您的示例中是否可以重命名文件?您显示的不是字母排序。您可以使用包gtools中的
mixedsort
。我不希望重命名实际文件。谢谢。我添加了一些信息。我无法手动添加,因为我有数千个文件。我如何修改你的代码?我不明白你为什么不能直接使用
mixedsort(GG)
@geekunamata他只是创建了一组“测试”名称。只需对文件名集合运行
mixedsort
。谢谢。我添加了一些信息。我无法手动添加,因为我有数千个文件。我如何修改你的代码?我不明白你为什么不能直接使用
mixedsort(GG)
@geekunamata他只是创建了一组“测试”名称。只需对您的文件名集合运行
mixedsort
。我使用GG,您能解释一下吗?我不明白。谢谢,教授,我误读了你的评论。我在表达式中替换了
GG
。听起来这正是你想要的。对不起,我可能没有解释清楚。这不是我想要的。基本上,GG给了我文件夹中所有文件的名称,我想对这些文件进行排序。我不想像您那样手动插入'ada','xyz'。我怎么做呢?无论如何,谢谢你。混合排序很简单。我使用GG。你能解释一下吗?我不明白。谢谢,教授,我误读了你的评论。我在表达式中替换了
GG
。听起来这正是你想要的。对不起,我可能没有解释清楚。这不是我想要的。基本上,GG给了我文件夹中所有文件的名称,我想对这些文件进行排序。我不想像您那样手动插入'ada','xyz'。我怎么做呢?无论如何,谢谢你。混合排序很简单。