2016-03-11 2 views
0
library(raster) 

Я работаю над относительно сложной задачей и нуждаюсь в советах по ее выполнению.RasterStack/Brick для нескольких переменных из нескольких файлов в нескольких папках R

  • Мои данные представляют собой растровые временные ряды с 1910-2000 по суточной шкале времени.

  • Каждый растровый файл (.asc) представляет собой временной шаг.

  • Данные хранятся в папках с каждой папкой, содержащей данные за 1 год (всего 91 папка). В каждой папке имеется 1095 файлов. Из этих 1095 файлов, Tmin = 365, Tmax = 365 и отрезка = 365, что соответствует 365 дням в году. Все годы отформатированы как високосные годы с 29 днями февраля и юлианским днем ​​60 отсутствуют в течение не-високосных годов.

  • В каждой папке, три переменных (Tmin, Tmax, осадки) помечены как max1910_1.asc,min1910_1.asc, precip1910_1.asc и т.д. вплоть до 365.

ЗАДАЧ:

1) Я хотел бы импортировать все файлы в R. Я могу получить путь к файлам с помощью:

files <- dir("C:/data//, recursive=TRUE, full.names=TRUE, pattern="\\.asc$")# 

2) Сделать rasterstack/кирпич для каждой переменной, т.е. TminStack, TmaxStack и PrecipStack.

В каждом из трех отдельных растровых стежков layer1 должен быть январем-01-1910, а последний слой - данными для Dec-31-2000.

3) Наконец, у меня будет 3 растровых ранга серии времени, соответствующих Tmax, Tmin и осадке. Я могу установить ось времени в три rasterstacks с помощью:

dates=seq(as.POSIXct("1910-01-01"), as.POSIXct("2000-12-31"), by="day") 
TminStack <- setZ(TminStack,dates) 
TmaxStack <- setZ(TmaxStack,dates) 
precipStack <- setZ(precipStack,dates) 

Я не мог поставить воспроизводимый пример, потому что файлы большие и хранятся в отдельных папках для каждого года.

Большое спасибо,

Sam.

ответ

1

Вы можете выбрать файлы на основе их имени, что-то вроде этого:

TminStack <- list.files(path=".", pattern=paste("min",".*.asc",sep=""), all.files=FALSE, full.names=TRUE,recursive=TRUE) 
+0

В каждой папке, имена файлов для трех переменных помечены как 'max1910_1.asc, min1910_1.asc, precip1910_1.asc 'поэтому, если я запустил:' TminStack <- list.files (path = ".", pattern = paste (min, ". *. asc", sep = ""), all.files = FALSE, full.names = TRUE , рекурсивный = TRUE), '; Я получаю ошибку 'Ошибка в пасте (min,". *. Asc ", sep =" "): не может принуждать тип 'builtin' к вектору типа 'character''. В задаче 1 в вопросе я могу прочитать все пути к файлу. Проблема заключается в том, как извлекать пути с помощью min, max и end и формировать отдельные растровые стопки? – code123

+0

'min 'должно быть в кавычках. –

+0

код работал отлично, за исключением того, что имена файлов не сортируются хорошо, что означает, что 'растер :: стек' не будет правильно складывать временные ряды, кроме случаев, когда' stack' сортирует имена файлов внутри. Это то, что я получил:> 'head (TminStack) [1]" ./canada_daily1950/1950/min1950_1.asc "" ./canada_daily1950/1950/min1950_10.asc " [3]" ./canada_daily1950/1950/min1950_100 .asc "" ./canada_daily1950/1950/min1950_101.asc " [5]" ./canada_daily1950/1950/min1950_102.asc ""./canada_daily1950/1950/min1950_103.asc ", но используя' require (gtools) TmnStack = mixedsort (TminStack) 'дает правильный порядок файлов. – code123