【问题标题】:Extracting date from file name and making it a variable从文件名中提取日期并使其成为变量
【发布时间】:2020-07-19 19:28:07
【问题描述】:

我有一个名称为“MERRA2_300.tavg1_2d_flx_Nx.20050101.SUB.nc”的文件列表,我需要使用循环组合所有这些文件,并在新的组合数据集中创建一个变量来描述每个观察日期与其原始文件相对应。所有文件都具有完全相同的名称,除了日期本身(即下一个文件是 MERRA2_300.tavg1_2d_flx_Nx.20050102.SUB.nc)

我写了一个循环如下

wi <- list.files(path = ".")

final_data <- data.frame(matrix(ncol = 7, nrow = 0)) 
colnames(final_data) <- c("PRECTOTCORR", "TLML", "lat", "lon", "time", "time_bnds", "date") 

for (i in wi) {
  nc<-open.nc(i)
  dat<-read.nc(nc) 

  date <- i

  dat$date <- date

  final_data <- rbind(final_data, dat)
}

date &lt;- i 这一行是这个问题的症结所在。我知道使用gsubstringrregx 有某种方法可以为每个观察创建一个日期变量,但我对操作和语法感到困惑。

理想情况下,答案会创建变量,使其被 R 理解为时间序列数据,但这不是绝对必要的。即使变量只是作为字符串创建的,我认为我可以自己从那里转到时间序列数据。

【问题讨论】:

  • 你可以在这里依靠什么?日期是否总是在文件名中的相同位置?它们是否始终采用相同的格式(8 个数字:年、月、日)?等等。
  • 是的,除了日期之外,文件名都完全相同。应该澄清一下,我会将其添加到原始问题中
  • 是的,它们的格式总是 YYYYMMDD

标签: r regex date gsub stringr


【解决方案1】:

作为对我自己问题的一点回答,gsub 命令可以很好地从文件名的一部分创建一个新变量。

wi1 <- "MERRA2_300.tavg1_2d_flx_Nx.20050101.SUB.nc"
nc1 <- open.nc(wi1)
dat1 <- read.nc(nc1)
dat1$date <- gsub("MERRA2_300.tavg1_2d_flx_Nx.|.SUB.nc", "", "MERRA2_300.tavg1_2d_flx_Nx.20050101.SUB.nc")

创建一个值为 20050101 的日期变量

目前正在尝试将其纳入循环...也许:

for (i in wi) {
  nc<-open.nc(i)
  dat<-read.nc(nc) 

  dat$date <- gsub("MERRA2_300.tavg1_2d_flx_Nx.|.SUB.nc", "", i)

  final_data <- rbind(final_data, dat)
}

【讨论】:

    猜你喜欢
    • 2022-08-16
    • 2017-08-11
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多