создание переменной даты из имен файлов в R - PullRequest
0 голосов
/ 06 апреля 2020

Мне нужна помощь в создании набора данных в R, где каждое наблюдение содержит широту, долготу и дату. Прямо сейчас у меня есть список из примерно 2000 файлов, расположенных в сетке по широте / долготе, и каждый файл содержит наблюдения за одну дату. В конечном итоге мне нужно объединить все эти файлы в один файл, в котором каждое наблюдение содержит переменную даты, извлекаемую из имени его файла.

Так, например, файл называется «MERRA2_400». .tavg1_2d_flx_Nx.20120217.SUB.n c». Я хочу, чтобы все наблюдения из этого файла содержали переменную даты 17.02.2012.

Это расширение "n c" описывает файл netCDF, который можно прочитать в R следующим образом:

library(RNetCDF)
setwd("~/Desktop/Thesis Data")
p1a<-"MERRA2_300.tavg1_2d_flx_Nx.20050101.SUB.nc"
pid<-open.nc(p1a)
dat<-read.nc(pid)

Я знаю, что команда ldply может быть полезна для извлечения и назначения новой переменной из имени файла. Но мне нужно создать al oop, который объединяет все файлы в папке «Thesis Data» выше (задается как мой wd) и дает им переменные даты в процессе.

Я пытался сделать это, используя две отдельные петли. Первый l oop загружает файлы один за другим, создает переменную даты из имени файла, а затем сохраняет их в новую папку. Второй l oop объединяет все файлы в этой новой папке. Мне не очень повезло с этой стратегией.

view[dat]

Как вы можете надеяться, вы видите на этом рисунке, который описывает загруженный выше файл данных, каждый файл содержит переменная времени, но эта переменная времени имеет одно наблюдение, которое составляет 690, в каждом файле. Поэтому я мог бы заменить эту переменную датой в имени файла или создать новую переменную - либо она работает.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 06 апреля 2020

У меня нет опыта работы с файлами .n c, но я думаю, что вам нужно в общих чертах сделать следующее:

filenames <- list.files(path = ".") # Creates a character vector of all file names in working directory

Создание пустого фрейма данных с именами столбцов:

final_data <- data.frame(matrix(ncol = ..., nrow = 0)) # enter number of columns you will have in the final dataset
colnames(final_data) <- c("...", "...", "...", ...) # create column names

Для каждого имени файла прочитайте файл, создайте столбец даты и напишите как объект в глобальной среде:

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

  date <- ... # use regex to get your date from i and convert it into date

  dat$date <- date

  final_data <- rbind(final_data, dat)
}
...