我有数以百计的.wav文件,并使用list. files导入它们。
[1] "10/Project_English-10/BL-0001_A-conifer-cone-contains-seeds/Balsam-poplar-English-0701.wav"
[2] "10/Project_English-10/BL-0001_A-conifer-cone-contains-seeds/Birch-English-0700.wav"
[3] "10/Project_English-10/BL-0001_A-conifer-cone-contains-seeds/Blueberry-English-0703.wav"
.......
[73] "3/Project_English-3/BL-0002_Lesser-horseshoe-bat/Capercaillie-English-0069.wav"
[74] "3/Project_English-3/BL-0002_Lesser-horseshoe-bat/Fat-tail-scorpion-English-0082.wav"
[75] "3/Project_English-3/BL-0002_Lesser-horseshoe-bat/Fire-salamander-English-0067.wav"
我使用下面的代码来重新排序文件路径,我希望每个子路径中的编号遵循数字顺序。
filename<- file_list[order(as.numeric(stringr::str_extract(file_list,"[0-9]+(.*?)")) )]
结果如下:
[1] "3/Project_English-3/BL-0002_Lesser-horseshoe-bat/Capercaillie-English-0069.wav"
[2] "3/Project_English-3/BL-0002_Lesser-horseshoe-bat/Fat-tail-scorpion-English-0082.wav"
[3] "3/Project_English-3/BL-0002_Lesser-horseshoe-bat/Fire-salamander-English-0067.wav"
.......
[73] "10/Project_English-10/BL-0001_A-conifer-cone-contains-seeds/Balsam-poplar-English-0701.wav"
[74] "10/Project_English-10/BL-0001_A-conifer-cone-contains-seeds/Birch-English-0700.wav"
[75] "10/Project_English-10/BL-0001_A-conifer-cone-contains-seeds/Blueberry-English-0703.wav"
我还希望最后一个子路径以数字顺序跟随,例如English-0067;我试着重复最后一个子路径的匹配,但是它会打乱之前3 ...10的顺序。我怎么能让所有子路径中的数字都遵循数字的顺序呢?
3条答案
按热度按时间ws51t4hk1#
另一个选择:
s3fp2yjn2#
这里有一个方法:
如果需要在排序中包含
BL-0001
,只需在正则表达式中添加一个小的内容,在proto=
中添加一个条目,就可以了。使用do.call(order, nums)
将处理1列或更多列,而不管有多少列。请注意,如果过度调整正则表达式,不匹配此处两个组的行将返回
NA
;这意味着它将最后排序NA
行。如果你发现一个或多个文件名顺序混乱,请检查正则表达式和中间的nums
条目中是否有这些文件名。1aaf6o9v3#
答:将数据结构化为表并在提取文件名之前使用
stringr::str_detect()
排列行。创建于2022年11月28日,使用reprex v2.0.2