【发布时间】:2015-10-22 08:50:00
【问题描述】:
我正在将目录中的一些 netcdf 文件读入 R。netcdf 文件是根据数据的某些特定特征命名的。
这是一个例子:
aa <- c("dayavg_fcst_surf125.011_tmp.1962010100_1962123121.nc",
"dayavg_fcst_surf125.011_tmp.1972010100_1972123121.nc",
"dayavg_fcst_surf125.011_tmp.1982010100_1982123121.nc",
"dayavg_fcst_surf125.011_tmp.1992010100_1992123121.nc",
"dayavg_fcst_surf125.011_tmp.2002010100_2002123121.nc",
"dayavg_fcst_surf125.011_tmp.2010010100_2010123121.nc",
"dayavg_fcst_surf125.011_tmp.2012010100_2012123121.nc",
"dayavg_fcst_surf125.011_tmp.2014020100_2014022821.nc",
"dayavg_fcst_surf125.011_tmp.2014120100_2014123121.nc",
"dayavg_fcst_surf125.011_tmp.2015020100_2015022821.nc")
这些是使用 list.files 函数收集的。
我想选择(保留)这些文件名的子集(作为字符串),特别是引用 2010 年和 2014 年收集的数据的文件。
年份在“.tmp”字符串后面的文件名中表示。例如,第一个条目是 1962 年,以此类推。
为此,我尝试了以下方法:
iyears <- c(2010,2014)
ll <- list()
for (i in 1:length(iyears)){
ll[[i]] <- aa[grepl(iyears[i],aa)]
}
ll <- c(ll[[1]],ll[[2]])
返回:
> ll
[1] "dayavg_fcst_surf125.011_tmp.1962010100_1962123121.nc" "dayavg_fcst_surf125.011_tmp.1972010100_1972123121.nc"
[3] "dayavg_fcst_surf125.011_tmp.1982010100_1982123121.nc" "dayavg_fcst_surf125.011_tmp.1992010100_1992123121.nc"
[5] "dayavg_fcst_surf125.011_tmp.2002010100_2002123121.nc" "dayavg_fcst_surf125.011_tmp.2010010100_2010123121.nc"
[7] "dayavg_fcst_surf125.011_tmp.2012010100_2012123121.nc" "dayavg_fcst_surf125.011_tmp.2014020100_2014022821.nc"
[9] "dayavg_fcst_surf125.011_tmp.2014120100_2014123121.nc" "dayavg_fcst_surf125.011_tmp.2015020100_2015022821.nc"
[11] "dayavg_fcst_surf125.011_tmp.2014020100_2014022821.nc" "dayavg_fcst_surf125.011_tmp.2014120100_2014123121.nc"
而答案应该是:
> ll
[1] "dayavg_fcst_surf125.011_tmp.2010010100_2010123121.nc" "dayavg_fcst_surf125.011_tmp.2014020100_2014022821.nc"
[3] "dayavg_fcst_surf125.011_tmp.2014120100_2014123121.nc"
问题是文件名中的日期字符串如下:
yyyymmddhh
所以,2010也出现在
"dayavg_fcst_surf125.011_tmp.1982010100_1982123121.nc",
由于 198[2 01 0]1.
任何人都可以提出一种获得所需结果的方法吗?
【问题讨论】:
-
你为什么不直接使用里面的“tmp”呢?喜欢:
grep("tmp.2010|tmp.2014", aa, value = TRUE)
标签: r