在向量中的许多文件中选择前几个文件

Posted

技术标签:

【中文标题】在向量中的许多文件中选择前几个文件【英文标题】:Selecting the first few files among many in a vector 【发布时间】:2022-01-05 20:29:17 【问题描述】:

我有一个名为 rastlist 的向量,它列出了使用此代码指定的所有文件:

rastlist <- list.files(path = "raw_data/MODIS_TERRA/NDVI_FinalFitted", pattern=c('2013','.TIF$'), all.files=TRUE, 
                       full.names=TRUE)

这是该对象包含的内容:

MOD09Q1_2013_ 后面的数字(例如 001、002、003....)表示一年中的天数。除了一年中的日子之外,其余名称都相同。

rastlist
  [1] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_001_NDVI_FinalFitted.tif"
  [2] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_002_NDVI_FinalFitted.tif"
  [3] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_003_NDVI_FinalFitted.tif"
  [4] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_004_NDVI_FinalFitted.tif"
  [5] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_005_NDVI_FinalFitted.tif"
  [6] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_006_NDVI_FinalFitted.tif"
  [7] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_007_NDVI_FinalFitted.tif"
  [8] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_008_NDVI_FinalFitted.tif"
  [9] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_009_NDVI_FinalFitted.tif"
 [10] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_010_NDVI_FinalFitted.tif"
 [11] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_011_NDVI_FinalFitted.tif"
 [12] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_012_NDVI_FinalFitted.tif"
 [13] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_013_NDVI_FinalFitted.tif"
 [14] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_014_NDVI_FinalFitted.tif"
 [15] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_015_NDVI_FinalFitted.tif"
 [16] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_016_NDVI_FinalFitted.tif"
 [17] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_017_NDVI_FinalFitted.tif"
 [18] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_018_NDVI_FinalFitted.tif"
 [19] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_019_NDVI_FinalFitted.tif"
 [20] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_020_NDVI_FinalFitted.tif"
 [21] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_021_NDVI_FinalFitted.tif"
 [22] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_022_NDVI_FinalFitted.tif"
 [23] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_023_NDVI_FinalFitted.tif"
 [24] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_024_NDVI_FinalFitted.tif"
 [25] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_025_NDVI_FinalFitted.tif"
 [26] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_026_NDVI_FinalFitted.tif"
 [27] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_027_NDVI_FinalFitted.tif"
 [28] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_028_NDVI_FinalFitted.tif"
 [29] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_029_NDVI_FinalFitted.tif"
 [30] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_030_NDVI_FinalFitted.tif"
 [31] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_031_NDVI_FinalFitted.tif"
 [32] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_032_NDVI_FinalFitted.tif"
 [33] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_033_NDVI_FinalFitted.tif"
 [34] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_034_NDVI_FinalFitted.tif"
 [35] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_035_NDVI_FinalFitted.tif"
 [36] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_036_NDVI_FinalFitted.tif"
 [37] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_037_NDVI_FinalFitted.tif"
 [38] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_038_NDVI_FinalFitted.tif"
 [39] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_039_NDVI_FinalFitted.tif"
 [40] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_040_NDVI_FinalFitted.tif"
 [41] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_041_NDVI_FinalFitted.tif"
 [42] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_042_NDVI_FinalFitted.tif"
 [43] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_043_NDVI_FinalFitted.tif"
 [44] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_044_NDVI_FinalFitted.tif"
 [45] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_045_NDVI_FinalFitted.tif"
 [46] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_046_NDVI_FinalFitted.tif"
 [47] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_047_NDVI_FinalFitted.tif"
 [48] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_048_NDVI_FinalFitted.tif"
 [49] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_049_NDVI_FinalFitted.tif"
 [50] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_050_NDVI_FinalFitted.tif"
 [51] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_051_NDVI_FinalFitted.tif"
 [52] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_052_NDVI_FinalFitted.tif"
 [53] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_053_NDVI_FinalFitted.tif"
 [54] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_054_NDVI_FinalFitted.tif"
 [55] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_055_NDVI_FinalFitted.tif"
 [56] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_056_NDVI_FinalFitted.tif"
 [57] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_057_NDVI_FinalFitted.tif"
 [58] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_058_NDVI_FinalFitted.tif"
 [59] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_059_NDVI_FinalFitted.tif"
 [60] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_060_NDVI_FinalFitted.tif"
 [61] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_061_NDVI_FinalFitted.tif"
 [62] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_062_NDVI_FinalFitted.tif"
 [63] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_063_NDVI_FinalFitted.tif"
 [64] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_064_NDVI_FinalFitted.tif"
 [65] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_065_NDVI_FinalFitted.tif"
 [66] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_066_NDVI_FinalFitted.tif"
 [67] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_067_NDVI_FinalFitted.tif"
 [68] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_068_NDVI_FinalFitted.tif"
 [69] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_069_NDVI_FinalFitted.tif"
 [70] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_070_NDVI_FinalFitted.tif"
 [71] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_071_NDVI_FinalFitted.tif"
 [72] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_072_NDVI_FinalFitted.tif"
 [73] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_073_NDVI_FinalFitted.tif"
 [74] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_074_NDVI_FinalFitted.tif"
 [75] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_075_NDVI_FinalFitted.tif"
 [76] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_076_NDVI_FinalFitted.tif"
 [77] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_077_NDVI_FinalFitted.tif"
 [78] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_078_NDVI_FinalFitted.tif"
 [79] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_079_NDVI_FinalFitted.tif"
 [80] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_080_NDVI_FinalFitted.tif"
 [81] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_081_NDVI_FinalFitted.tif"
 [82] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_082_NDVI_FinalFitted.tif"
 [83] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_083_NDVI_FinalFitted.tif"
 [84] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_084_NDVI_FinalFitted.tif"
 [85] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_085_NDVI_FinalFitted.tif"
 [86] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_086_NDVI_FinalFitted.tif"
 [87] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_087_NDVI_FinalFitted.tif"
 [88] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_088_NDVI_FinalFitted.tif"
 [89] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_089_NDVI_FinalFitted.tif"
 [90] "raw_data/MODIS_TERRA/NDVI_FinalFitted/MOD09Q1_2013_090_NDVI_FinalFitted.tif"

在下面的代码中: 我正在尝试对列表进行子集化并仅在前 31 天堆叠栅格,但代码似乎需要一段时间才能加载,我不确定我是否正确执行此操作。任何人都可以验证下面的代码是否正在这样做?如果不是,如何仅获取rastlist中的前31个文件进行堆叠?

library(raster)
allrasters <- stack(rastlist)                       

#get the date from the names of the layers and extract the month
indices <- format(as.Date(names(allrasters), format = "MOD09Q1_%Y_%j"), format = "%j")
indices <- as.numeric(indices)

#sum layers
Jan_NDVI<- stackApply(allrasters, indices[1:31] ,fun = mean)

【问题讨论】:

【参考方案1】:

我们可以提取year之后的第二天(假设只有一年),转换为numeric类,order rastlist,得到有序向量的前31个元素

rastlist[order(as.integer(sub(".*_\\d4_(\\d3)_.*", "\\1", rastlist)))[1:31]

如果超过一年,则提取日期部分,转换为Date类,order,对有序的'rastlist'进行子集化

rastlist[order(as.Date(sub(".*_(\\d4_\\d3)_.*", "\\1", 
          rastlist), "%Y_%j"))][1:31]

【讨论】:

如果year不止一个,我该如何修改? @JohnHuang 在这种情况下,提取日期部分并订购,即rastlist[order(as.Date(sub(".*_(\\d4_\\d3)_.*", "\\1", rastlist), "%Y_%j"))][1:31]

以上是关于在向量中的许多文件中选择前几个文件的主要内容,如果未能解决你的问题,请参考以下文章

网站和 PHP:执行速度更快。从几个目录与许多目录加载文件? [复制]

在 Android 11 上编写许多文件

文件大小适中的构建挂起

从多个csv中提取列名前几个字符的列

将文件中的dsj替换为bigdata的命令是啥

有效地将许多大型 CSV 文件中的 XYZ 坐标排序到小图块中