我有一个循环作用于
之类的列表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等。
感谢
答案 0 :(得分:1)
list.files
和dir
都按字母顺序返回文件,如上面的评论中所述。概括来说,文件顺序的意义是什么?你想要它们通过前缀以数字方式排序吗?然后试试这个:
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