我的问题类似于这个问题:如何更改list.files()的显示顺序:例如,基于文件的整个名称的一部分
但我的情况不同.我使用了提供的解决方案:
a=a[order(gsub('.*_(\\d{8})[.].*','\\1',a))]
Run Code Online (Sandbox Code Playgroud)
但是对我的情况不起作用,因为我的案例中的命名与该问题中提供的命名不同.
我在目录中有几个文件.文件的命名很复杂,例如:
file.img
file.img
Run Code Online (Sandbox Code Playgroud)
我想列出文件,以便我可以使用它们,似乎R按特定顺序列出它们.即使数据没有正确排序,R也会按字母顺序排序文件.例如,这两个文件名称:
如何告诉R更改list.files的默认显示,并 根据_yearmonthday 订购文件,这些文件仅表示所有文件中的yearmonthday:
列出R中的文件我们使用这个:
我用了:
mixsort
Run Code Online (Sandbox Code Playgroud)
但没有按我要求订购它们
我想你只需要改变gsub函数的模式.例如:
xx <- 'SM_OP_20120330T000000_20120330T235959_245_001_7_ssture.img'
gsub('.*_(\\d{8}).*','\\1',xx)
"20120330"
Run Code Online (Sandbox Code Playgroud)
所以,整个解决方案是:
a <- list.files("D:\\semon", "*.img", full.names = TRUE)
a <- a[order(as.numeric(gsub('.*_(\\d{8}).*','\\1',a)))]
Run Code Online (Sandbox Code Playgroud)
编辑添加一个例子:
a <- list('SM_OP_20120330T000000_20120330T235959_245_001_7_ssture.img', ##2012-mars-30
'SM_RE_20101130T000000_20110427T235959_245_001_7_ssture.img', ##2010-nov-30
'SM_RE_20100901T000000_20090127T235959_245_001_7_ssture.img', ##2010-sep-01
'SM_RE_20100904T000000_20090427T235959_245_001_7_ssture.img') ##2010-sep-04
a[order( as.numeric(gsub('.*_(\\d{8}).*','\\1',a)))]
[[1]]
[1] "SM_RE_20100901T000000_20090127T235959_245_001_7_ssture.img"
[[2]]
[1] "SM_RE_20100904T000000_20090427T235959_245_001_7_ssture.img"
[[3]]
[1] "SM_RE_20101130T000000_20110427T235959_245_001_7_ssture.img"
[[4]]
[1] "SM_OP_20120330T000000_20120330T235959_245_001_7_ssture.img"
Run Code Online (Sandbox Code Playgroud)