Как я могу экспортировать данные из GrAD в файл.csv или из NetCDF в.csv?

У меня есть реальные трудности с экспортом данных из GrADS в файл.csv, хотя это должно быть действительно легко. Данный файл взят из проекта APHRODITE, касающегося осадков в Азии. В основном я могу прочитать этот файл в GrADS, используя:

open d:/aphro/aphro.ctl

и это говорит мне, что:

Data file d:/aphro/APHRO_MA_025deg_V1101R2.%y4 is open as file 1
Lon set to 60.125 149.875
Lat set to -14.875 54.875
Lev set to 1 1
Time values set: 1961:1:1:0 1961:1:1:0
E set to  1 1

Если я выполню:

q ctlinfo

это также говорит мне, что у меня есть три переменные:

precip 1 0 daily precipitation analysis
rstn 1 0  ratio of 0.05 degree grids with station
flag 1 0 ratio of 0.05 degree grids with snow

Хорошо, теперь все, что я хочу сделать, это создать список в файле.csv (или.txt) со следующей информацией:

Precipitation   Lon    Lat   Time(date)

Звучит очень легко, но я просто не могу этого сделать. Одним из методов является использование:

fprintf precip d:/output.csv %g 1

Это дает мне файл.csv со всеми данными за этот день в одном длинном столбце (что я и хочу). Я также могу сделать то же самое для lon и lat в разных файлах и комбинировать их. Проблема в том, что для выходного файла требуются целые годы - это гораздо быстрее, если вы не возражаете против большого количества столбцов, но это становится проблемой для управления. По сути, этот метод слишком медленный.

Другой способ - экспортировать данные в виде файла NetCDF:

Set sdfwrite -4d d:/output.nc
define var = precip
sdfwrite precip

Затем он очень быстро записывает файл с именем output.nc, который содержит все данные, которые мне нужны. Использование RI может затем прочитать все переменные в отдельности, например

f <- open.ncdf("D:/aphro/test.nc")
A <- get.var.ncdf(nc=f,varid="time")
B <- get.var.ncdf(nc=f,varid="rain")
D <- get.var.ncdf(nc=f,varid="lon")
E <- get.var.ncdf(nc=f,varid="lat")

Но я хочу создать выходной файл, в котором каждая строка сообщает мне время, количество дождя, долготу и долготу. Я попробовал rbind, но он не связывает правильное время (дату) с правильным количеством дождя, и аналогичным образом портит долготу и широту, так как есть сотни тысяч данных о дожде, но только несколько дат и только 360 лонных точек и 280 точки широты (т. е. данные о дожде - это сетка данных за каждый день в течение нескольких дней). Я уверен, что это должно быть легко, но как это сделать?

Пожалуйста помоги

Тони

1 ответ

Насколько мне известно, вы можете изменить файл GrAD на файл NetCDF, используя оператор климатических данных и R вместе. Подробности можно найти здесь. Далее файл NetCDF может быть преобразован в файл.csv. Для этого я предоставляю фиктивный код.

library(ncdf)
nc <- open.ncdf("foo.nc")             #open ncdf file and read variables
lon <- get.var.ncdf(nc, "lon")         # Lon lat and Time
lat <- get.var.ncdf(nc, "lat")
time <- get.var.ncdf(nc, "time")
dname <- "t"                         # name of variable which can be found by using print(nc)
nlon <- dim(lon)
nlat<- dim(lat)
nt<- dim(time)
lonlat <- expand.grid(lon, lat)    # make grid of given longitude and latitude 
mintemp.array <- get.var.ncdf(nc, dname)
dlname <- att.get.ncdf(nc, dname, "long_name")
dunits <- att.get.ncdf(nc, dname, "units")
fillvalue <- att.get.ncdf(nc, dname, "_FillValue")
mintemp.vec.long <- as.vector(mintemp.array)
mintemp.mat <- matrix(mintemp.vec.long, nrow = nlon * nlat, ncol = nt)
mintemp.df <- data.frame(cbind(lonlat, mintemp.mat))
options(width = 110)
write.csv(mintemp.df, "mintemp_my.csv")

Надеюсь, это объясняет ваш вопрос.

Другие вопросы по тегам