2016-12-02 3 views
0

У меня есть .txt-файл, содержащий несколько станций, сопровождаемых их координатами. Таким образом, .txt файл имеет три столбца: один с идентификатором станции, один с латами и один с долготой, как показано на рисунке:Выделение временных рядов для нескольких местоположений одновременно и их сохранение в отдельный файл

station , lat , lon 
ABTR2100 ,39.13,34.52 
GRMR0100 ,20.18,49.00 
DDDD0100 ,23.22,46.81 
SLPT0100 ,26.91,32.23 
NDRT0100 ,29.55,48.97 

Кроме того, у меня есть .NC файл, содержащего данные почасовой температуры за март 2011 года . структура .NC файла выглядит следующим образом:

2 variables (excluding dimension variables): 
    char rotated_pole[] 
     grid_mapping_name: rotated_latitude_longitude 
     grid_north_pole_latitude: 39.25 
     grid_north_pole_longitude: -162 
    float var11[rlon,rlat,height,time] 
     table: 2 
     grid_mapping: rotated_pole 
4 dimensions: 
    rlon Size:848 
     standard_name: grid_longitude 
     long_name: longitude in rotated pole grid 
     units: degrees 
     axis: X 
    rlat Size:824 
     standard_name: grid_latitude 
     long_name: latitude in rotated pole grid 
     units: degrees 
     axis: Y 
    height Size:1 
     standard_name: height 
     long_name: height 
     units: m 
     positive: up 
     axis: Z 
    time Size:744 *** is unlimited *** 
     standard_name: time 
     units: hours since 2011-02-28 18:00:00 
     calendar: proleptic_gregorian 

То, что я хочу сделать, это извлечь временные ряды для каждой из станций, содержащихся в текстовом файле для каждого временного шага, и сохранить время series в отдельный .txt-файл, который будет иметь имя идентификатора станции. Таким образом, это означает, что у меня будет файл .txt с именем «ABTR2100_temp», который будет содержать временные ряды для этого конкретного местоположения. То же самое произойдет со всеми станциями. Я мог бы сделать это в R?

+1

Вы можете попробовать 'ncdf' пакет для чтения в * .nc файле правильно. –

+0

Paul Hiemstra, я попытался применить извлечение, используя растровый пакет в R, прочитав файл .nc в качестве кирпича, а затем воспользуюсь командой «extract», чтобы извлечь мой временной ряд для моих очков, но это решение не дайте то, что я хочу. Я хочу сохранить временные ряды для разделения файлов для каждого местоположения и назвать файл идентификатором станции. – marika

+0

A.Val, у меня нет проблем с чтением файла .nc правильно, но для извлечения временных рядов и сохранения их для разделения файлов, присваивая имени файла имя идентификатора станции! – marika

ответ

1

Прочитайте координаты своей станции как фрейм данных. Запретить преобразование имен станций в фактор disable stringsAsFactor аргумент.

yourstations <- read.csv("yourstations.txt", stringsAsFactor = FALSE) 

Загрузите данные в виде соединения в ваше рабочее пространство с помощью ncdf4 пакета. Проверьте, все ли в порядке?

library(ncdf4) 
nc.filename <- "yourdata.nc" 
yourconn.nc <- nc_open(nc.filename) 
yourconn.nc 

Получите значение широты и долготы сетки.

lon <- ncvar_get(yourconn.nc,"rlon") 
lat <- ncvar_get(yourconn.nc,"rlat") 

Используйте цикл for для каждой строки кадра данных станций. С помощью цикла for найдите ближайшую широту и долготу и на основе номера строки-столбца получите все значения для одной точки сетки (sta.temp). Напишите имя станции.

for(ttnum in 1:nrow(yourstations)){ 
    ## Find the closes lat  
    lat.diff <- abs(lat - yourstations[ttnum, "lat"]) 
    lat.nr <- which(lat.diff == min(lat.diff))[1] 
    ## Find the closes lon 
    lon.diff <- abs(lon - yourstations[ttnum, "lon"]) 
    lon.nr <- which(lon.diff == min(lon.diff))[1] 
    ## Copy data of the gridpoint 
    sta.temp <- ncvar_get(yourconn.nc, "var11", c(lon.nr,lat.nr,1,1),c(1,1,1,744)) 
    ## Write the vector 
    write(sta.temp, file = paste0(yourstations[ttnum, "station"],"_temp.txt"), ncol = 1) 
} 

Я не уверен, что вы можете работать гладко с повернутыми координатами (см вопрос Extracting site-specific information from NetCDF file in R где netcdf4 пакет, используемый через raster).