0

我的问题类似于这个问题:How to change the order of display of list.files(): example based on part of the whole name of files

但我的情况不同。我使用了提供的解决方案:

              a=a[order(gsub('.*_(\\d{8})[.].*','\\1',a))]

但不适用于我的案例,因为我的案例中的命名与该问题中提供的命名不同。

我在一个目录中有几个文件。文件的命名很复杂,例如:

 file.img
 file.img

我想列出这些文件以便我可以使用它们,似乎 R 按特定顺序列出了它们。即使数据没有正确排序,R也会按字母顺序对文件进行排序。例如这两个文件名:

如何告诉 R 更改 list.files 的默认显示,并 仅根据 _yearmonthday 对文件进行排序,这代表所有文件中的年月日:

要列出 R 中的文件,我们使用这个:

我用了:

      mixsort 

但没有按我的意愿订购它们

4

1 回答 1

5

我认为您只需要更改gsub功能的模式即可。例如:

xx <- 'SM_OP_20120330T000000_20120330T235959_245_001_7_ssture.img'
gsub('.*_(\\d{8}).*','\\1',xx)
"20120330"

所以,整个解决方案是:

 a <- list.files("D:\\semon", "*.img", full.names = TRUE)
 a  <- a[order(as.numeric(gsub('.*_(\\d{8}).*','\\1',a)))]

编辑添加一个例子:

   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"
于 2013-06-05T13:35:58.680 回答