Сгенерируйте вектор временных рядов (пространственное среднее) из NETCDF R

У меня есть файл NETCDF с такими атрибутами, как долгота, широта, время, осадки. Данные охватывают определенную пространственную область. Это ежедневные данные с 1960 по 2100 год.

1) Я хотел бы разделить данные пространственно (например, широта [45,50] и долгота [-78, -85]) из основного домена

2) Из подмножества я хотел бы усреднить по всем сеткам и создать ежедневный временной ряд с одним столбцом, а затем записать его в файл .csv.

NB: мои данные содержат недостающие значения


person code123    schedule 11.11.2015    source источник


Ответы (3)


Что-то в этом роде должно работать

library(raster)
b <- brick('file.nc')
be <- crop(b, extent(-85, -78, 45, 50))
a <- aggregate(be, dim(be)[2:1], na.rm=TRUE)
v <- values(a)
write.csv(v, 'precip.csv', row.names=FALSE)

Обычно, чтобы получить дату:

date <- getZ(be)

Or

date <- names(a)
date <- gsub('X', '', date)

А потом

v <- data.frame(date=date, prec=v)
write.csv(v, 'precip.csv', row.names=FALSE)

Доступна ли эта дата для чтения человеком, зависит от того, как она хранится в файле ncdf (т.е. соблюдаются ли определенные соглашения или нет).

person Robert Hijmans    schedule 11.11.2015
comment
Большой! Большое спасибо @RobertH. Именно то, что я искал. Как сделать столбец даты удобочитаемым? Большое спасибо. - person code123; 12.11.2015
comment
Я отредактировал ответ, чтобы ответить на этот дополнительный вопрос - person Robert Hijmans; 12.11.2015

Это сделает сокращение и усреднение, но записывает ответ в другой netcdf. Если вам действительно нужен CSV, вам нужно будет использовать эту часть решения выше.

cdo fldmean -sellonlatbox,-85,-78,45,50 in.nc out.nc
person Adrian Tompkins    schedule 29.03.2018
comment
спасибо за это решение. Это великолепно. Теперь я использую cdo, ncl или nco для большинства этих операций. - person code123; 31.03.2018

person    schedule
comment
пожалуйста, поделитесь некоторыми пояснениями о том, как этот код решает проблему - person OMR; 03.12.2020
comment
предупреждение: это решение даст НЕПРАВИЛЬНЫЙ ответ, поскольку оно не влияет на уменьшение размеров ячеек на более высоких широтах ... См. этот ответ, например: stackoverflow.com/questions/60571445/ - person Adrian Tompkins; 18.12.2020