Создайте data.frame в R из файла NetCDF, включая широту, долготу, день, месяц, год, переменные - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь создать data.frame в R со следующими именами столбцов: latitutde, longitude, Day, Month, Year и различными показателями температуры с использованием базы данных по аномалиям температуры кораллового рифа (CoRTAD).

В частности, я использую cortadv6_SSTA.n c https://data.nodc.noaa.gov/cortad/Version6/

У меня проблемы с форматированием и включением дат для добавления в метрики. Примечание: я обычно делаю это в ARCGIS, но программа продолжает зависать, вероятно из-за размера файла (103 ГБ).

Вот что я сделал до сих пор:

Считайте данные:

ncin <- nc_open(ncfname)
print(ncin) #time_period_covered: Weekly, 1982-01-02 - 2019-12-27

Извлеките переменные: lat, lon и tas

lon <- ncvar_get(ncin,"lon")
lat <- ncvar_get(ncin,"lat")
tas <- ncvar_get(ncin, "SSTA_FrequencyStandardDeviation") #one of the variables of interest

одно из примеров мест, представляющих интерес, чтобы сделать данные меньше и проще работать с

lon_index <- which.min(abs(lon -  -149.437596))
lat_index <- which.min(abs(lat - -17.788787))

Вывод одного значения, потому что время еще не включено

tas[lon_index, lat_index]

следующее ниже не будет работать, потому что данные не отформатированы правильно (хотя в ncin говорится, что они в "григорианском" формате

tas_time <- nc.get.time.series(ncin, correct.for.gregorian.julian=TRUE)
time_index <- which(format(tas_time, "%Y-%m-%d") == "2075-07-15")

Это похоже на полезную функцию из пакета ncdf4.helpers, но оно привело к нулевым возвращаемым значениям

library(ncdf4.helpers)
tas2 <- nc.get.var.subset.by.axes(ncin, c("SSTA_FrequencyStandardDeviation","time"),
                                 axis.indices = list(X = lon_index,
                                                     Y = lat_index))

Я попытался переформатировать даты

time <- ncvar_get(ncin,"time")
time
dim(time)
tunits <- ncatt_get(ncin,"time","units")
nt <- dim(time)
nt

в лучшем случае можно было бы заставить функцию, подобную следующей, работать из пакета ereefs

library(ereefs)
library(ncdf4)

test.reef<-get_ereefs_ts(var_names = ("SSTA_FrequencyStandardDeviation"),
  location_latlon = c(-XXX, YYY), layer = "surface",
  start_date = c(2010, 12, 31), end_date = c(2016, 10, 31),
  input_file = "cortadv6_SSTA.nc", input_grid = NA, eta_stem = NA,
  override_positive = FALSE, verbosity = 1)

Следующие посты очень многообещающие и были полезны, но мне кажется, что часть даты не верна : https://cran.r-project.org/web/packages/futureheatwaves/vignettes/starting_from_netcdf.html Используйте R для извлечения временных рядов из данных netcdf https://pjbartlein.github.io/REarthSysSci/ltms-and-anomalies.html

Спасибо за любую помощь !!

...