gpt4 book ai didi

r - 使用数字和字母(字母数字)名称对文件/对象进行排序

转载 作者:行者123 更新时间:2023-12-04 22:07:00 24 4
gpt4 key购买 nike

我的文件是:

CT.BP.50.txt
CT.BP.200.txt
CT.BP.500.txt
GP.BP.50.txt
GP.BP.200.txt
GP.BP.500.txt

files <- c("CT.BP.50.txt", "CT.BP.200.txt", "CT.BP.500.txt", "GP.BP.50.txt", "GP.BP.200.txt", "GP.BP.500.txt")

我想对它们执行特定的操作,我可以这样做:
for (i in 1:length(files)) {
foo <- read.table(files[i])
barplot(table(foo$V1), main = files[i])
}

但是 R 按以下顺序绘制它们:

"CT.BP.200.txt" "CT.BP.500.txt" "CT.BP.50.txt" "GP.BP.200.txt" "GP.BP.500.txt" "GP.BP.50.txt"



我希望它们按排序顺序绘制:

"CT.BP.50.txt" "CT.BP.200.txt" "CT.BP.500.txt" "GP.BP.50.txt" "GP.BP.200.txt" "GP.BP.500.txt"



如何对带有字母数字名称的对象进行排序?

最佳答案

问题是 list.files() 以标准(词法)排序顺序返回文件名,并且数字正在逐个位置进行比较,而不是作为数字的一部分。

files <- sort(c("Gen.Var_CT.BP.200.txt", "Gen.Var_CT.BP.500.txt", 
"Gen.Var_CT.BP.50.txt", "Gen.Var_GP.BP.200.txt",
"Gen.Var_GP.BP.500.txt", "Gen.Var_GP.BP.50.txt"))

在我的系统上,这给出了:
> files
[1] "Gen.Var_CT.BP.200.txt" "Gen.Var_CT.BP.50.txt" "Gen.Var_CT.BP.500.txt"
[4] "Gen.Var_GP.BP.200.txt" "Gen.Var_GP.BP.50.txt" "Gen.Var_GP.BP.500.txt"

函数 gtools::mixedsort 将(通常)按您想要的方式排序:字符串中的一系列数字将被视为用于排序的数字。但是,您的示例有一些障碍,因为 mixedsort 假设 . 是数字的一部分,因此将 .200. 视为潜在数字,实际上不能将其作为数字进行排序。由于您的示例中没有实际的小数点,因此您可以解决这个问题。
files <- files[mixedorder(gsub("\\.", " ", files))]

所以文件现在排序为:
> files
[1] "Gen.Var_CT.BP.50.txt" "Gen.Var_CT.BP.200.txt" "Gen.Var_CT.BP.500.txt"
[4] "Gen.Var_GP.BP.50.txt" "Gen.Var_GP.BP.200.txt" "Gen.Var_GP.BP.500.txt"

关于r - 使用数字和字母(字母数字)名称对文件/对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com