R批量处理xlsx文件时文件名排序问题_2020-03-04W

如果你经常需要处理有规律可循的表格文件时,就建议你学学R语言、Python或者Julia语言,用编程的方法处理表格文件吧,你的学习会有丰厚的回报!

回到正题,我手上有一堆实验得到的表格文件,它们是有规律的,给大家看一下(见下图):

R批量处理xlsx文件时文件名排序问题_2020-03-04W

我需要对它们进行批量处理,我的一个方法是用dir()函数或者list.files()函数填加pattern参数来获取文件名列表:

先来处理pep表格

pep_file_list <- dir(path = "./", pattern = "*pep")

print(pep_file_list)

 [1] "0132-1-pep.xlsx"  "0132-10-pep.xlsx" "0132-11-pep.xlsx"
 [4] "0132-12-pep.xlsx" "0132-13-pep.xlsx" "0132-14-pep.xlsx"
 [7] "0132-15-pep.xlsx" "0132-16-pep.xlsx" "0132-17-pep.xlsx"
[10] "0132-18-pep.xlsx" "0132-19-pep.xlsx" "0132-2-pep.xlsx" 
[13] "0132-20-pep.xlsx" "0132-21-pep.xlsx" "0132-22-pep.xlsx"
[16] "0132-23-pep.xlsx" "0132-24-pep.xlsx" "0132-25-pep.xlsx"
[19] "0132-26-pep.xlsx" "0132-27-pep.xlsx" "0132-28-pep.xlsx"
[22] "0132-29-pep.xlsx" "0132-3-pep.xlsx"  "0132-30-pep.xlsx"
[25] "0132-4-pep.xlsx"  "0132-5-pep.xlsx"  "0132-6-pep.xlsx" 
[28] "0132-7-pep.xlsx"  "0132-8-pep.xlsx"  "0132-9-pep.xlsx" 

但是这个文件名排序是有问题的,“0132-1-pep.xlsx”为pep_file_list的第一个文件这个没有问题,但是紧接着第二个文件竟然是“0132-10-pep.xlsx”,我希望第二个文件是“0132-3-pep.xlsx”,这是为什么呢?是因为R默认排序的问题,对于R来说,它总需要一个顺序,即使它是随机的顺序,幸好,有很多方法处理这样的问题,我这里给大家提供一个方法,用gtools包,其余的自己慢慢找~

library(gtools)

pep_file_list <- mixedsort(pep_file_list, decreasing = T)

利用mixedsort()函数正确排序,这就是我想要的文件名正确顺序,处理完如下所示:

print(pep_file_list)

 [1] "0132-1-pep.xlsx"  "0132-2-pep.xlsx"  "0132-3-pep.xlsx" 
 [4] "0132-4-pep.xlsx"  "0132-5-pep.xlsx"  "0132-6-pep.xlsx" 
 [7] "0132-7-pep.xlsx"  "0132-8-pep.xlsx"  "0132-9-pep.xlsx" 
[10] "0132-10-pep.xlsx" "0132-11-pep.xlsx" "0132-12-pep.xlsx"
[13] "0132-13-pep.xlsx" "0132-14-pep.xlsx" "0132-15-pep.xlsx"
[16] "0132-16-pep.xlsx" "0132-17-pep.xlsx" "0132-18-pep.xlsx"
[19] "0132-19-pep.xlsx" "0132-20-pep.xlsx" "0132-21-pep.xlsx"
[22] "0132-22-pep.xlsx" "0132-23-pep.xlsx" "0132-24-pep.xlsx"
[25] "0132-25-pep.xlsx" "0132-26-pep.xlsx" "0132-27-pep.xlsx"
[28] "0132-28-pep.xlsx" "0132-29-pep.xlsx" "0132-30-pep.xlsx"

#@ 文件名按照0132-1,0132-2,0132-3...0132-30的顺序排列的,方便我后续进行批量处理

关于此gtools包的其他函数,建议大家有时间的话自学一下

最后,晚安啦,时间不早了,我真是“夜神孤星”了~