R中循环的数字顺序

时间:2017-11-22 15:54:40

标签: r

我有一个循环作用于

之类的列表
1_file.txt
2_file.txt
...
18_file.txt

我的文件浏览器中的文件是'正确'顺序,因为它们是

10_file.txt
11_file.txt
12_file.txt
13_file.txt
14_file.txt
15_file.txt
16_file.txt
17_file.txt
18_file.txt
1_file.txt
2_file.txt

但是当循环读入它们时,它会按以下顺序读取它们:

df1 = pd.DataFrame({"msno":["f1", "f2", "f3", "f4"], "is_churn":[0,0,1,1]})
df2 = pd.DataFrame({"msno":["f5", "f0", "f3", "f2"], "is_churn":[0,1,1,1]})

 is_churn msno
0         0   f1
1         0   f2
2         1   f3
3         1   f4
   is_churn msno
0         0   f5
1         1   f0
2         1   f3
3         1   f2

等,这很烦人并搞砸了我的结果打印输出。有没有办法让我可以让'循环以'正确'的数字顺序读取文件,就像我的目录,1_file.txt,2_file.txt等。

感谢

1 个答案:

答案 0 :(得分:1)

list.filesdir都按字母顺序返回文件,如上面的评论中所述。概括来说,文件顺序的意义是什么?你想要它们通过前缀以数字方式排序吗?然后试试这个:

ff <- dir(pattern=".txt")
ff <- ff[order(as.numeric(gsub("_.*", "", ff)))]

我看到你使用full.names=T。如果文件名中包含路径,则需要使用basename:

 ff <- ff[order(as.numeric(gsub("_.*", "", basename(ff))))]

另一方面,如果他们以这种方式命名,因为那是他们在你创建的顺序,你也可以按时间排序:

ff <- ff[order(sapply(ff, file.mtime), decreasing = FALSE)]

然后你可以做

for(f in ff) {
  # do something with f
}

第h