2014-11-25 2 views
0

У меня есть четыре файла netcdf в папке, и я хочу извлечь некоторые значения из этих файлов. НТР из файла:Как извлечь дату из имени файла nc?

  1] "file C:1.DBL.nc has 2 dimensions:" 
      [1] "lat Size: 1" 
      [1] "lon Size: 1" 
      [1] "file C:\\Users\\data.nc has 3 variables:" 
      [1] "short So[lon,lat] 
      [1] "short il[lon,lat] 
      [1] short fg[lon,lat] 

код:

   a<-list.files("C:\\Users\\Data", "*.nc", full.names = TRUE) 
       D<-matrix(NA,length(a),3) 
     for(i in 1:length(a)){ 
     f <- open.ncdf(a[i]) 
     A = get.var.ncdf(nc=f,varid="So",verbose=TRUE) 
     B <- get.var.ncdf(nc=f,varid="il") 
     C <- get.var.ncdf(nc=f,varid="fg") 
     D[i,]<-t(rbind(A,B,C))} 

     write.table(D,file="output-all.txt") 

каждый файл в dirctory представляет собой дату, написанную на имя файла в этом 20100929 в этом файле:

 ext_20100929T235959_272_001_7_1.nc 

Я хотел бы добавить в выходной текстовый файл с date взятую из имени файла

выход кода выше даст:

  "A" "B" "C" 
     "1" 500 200 300 
     "2" 500 200 300 

Я хочу, чтобы добавить дату как:

  "A" "B" "C" "date" 
     "1" 500 200 300 ? 
     "2" 500 200 300 ? 

Любая помощь приветствуется

ответ

1

Из вектора строк, как это вы можете извлечь дату и время, с strptime:

f <- "ext_20100929T235959_272_001_7_1.nc" 
strptime(f, "ext_%Y%m%dT%H%M%S", tz = "GMT") 
## [1] "2010-09-29 23:59:59 GMT" 

dt <- as.POSIXct(strptime(f, "ext_%Y%m%dT%H%M%S", tz = "GMT")) 

(Предполагая токенизация в этом формате см. - help(strptime).)

Вы можете поместить этот вектор «dt» в data.frame, но в вашем вопросе вы разбиваете все на матрицу с помощью t(), так что у вас есть другие проблемы. Я бы сделал все имена файлов одним ударом, используя вышеприведенный код, а затем построил data.frame(date = dt, A = numeric(length(dt)), ...) и т. Д. И заполнил строки ABC в вашем цикле.

Используйте это, чтобы получить все даты файла, предполагая, что формат является правильным и они последовательны:

dt <- as.POSIXct(strptime(basename(a), "ext_%Y%m%dT%H%M%S", tz = "GMT")) 
+0

Спасибо, но это дает, например, DT: '" 2010-09-29 23:59:59 GMT "'. Я бы хотел, чтобы у него было что-то разделенное как '' 2010-09-29 «' '" 23:59:59 «' без GMT, потому что я нуждаюсь в них как числа, которые будут использоваться при построении временного ряда? – hyat

+0

Что вы подразумеваете под этим: и заполняйте строки ABC в своем цикле. – hyat