Извлечение данных о месячной температуре с использованием координат файла ЧПУ
Я пытаюсь прочитать данные о температуре в R с помощью файла NOAA OI SST .nc. У меня есть данные о температуре за месяц, но у меня возникают проблемы с извлечением данных о среднемесячной температуре из нужных мне координат и их помещением в фреймворк.
Я новичок в этом, любая помощь или указатели очень ценятся.
setwd("~/temperatura/noaa"
prueba<-nc_open("sst.mnmean.nc")
#EXTRAER DATOS
lon<-ncvar_get(prueba,"lon")
lat<-ncvar_get(prueba,"lat")
time<-ncvar_get(prueba,"time")
time=as.Date(time, origin="1800-1-1",tz="UTC")
sst=ncvar_get(prueba,"sst")
unit<-ncatt_get(prueba,"sst","units")$value
Я пытался сделать матрицу, но со временем у меня остались только числа, а не месяцы
matriz <- data.frame(cbind(time,lon,lat,sst))
names(matriz) <- c("time","lon","lat","temperature")
time lon lat temperature
1 4352 0.5 89.5 -1.79
2 4383 1.5 88.5 -1.79
3 4414 2.5 87.5 -1.79
4 4442 3.5 86.5 -1.79
5 4473 4.5 85.5 -1.79
6 4503 5.5 84.5 -1.79
7 4534 6.5 83.5 -1.79
8 4564 7.5 82.5 -1.79
9 4595 8.5 81.5 -1.79
нравится
2 ответа
Вы можете использовать raster
пакет для этого нравится
library(raster)
r <- brick("sst.mnmean.nc")
r
plot(r, 1)
#Provide longitude & latitude
x1 <- c(0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5)
y1 <- c(89.5, 88.5, 87.5, 86.5, 85.5, 84.5, 83.5, 82.5, 81.5)
points <- cbind(y1,x1)
#Make points as saptial points
spts <- SpatialPoints(points, proj4string=CRS("+proj=longlat +datum=WGS84"))
#Plot those points
plot(spts, add = TRUE)
#Extract raster values
ex1 <- extract(r, spts, fun='mean', na.rm=TRUE, df=TRUE, weights = TRUE)
#To get the date of the raster you can use
idx <- getZ(r)
#Write the extracted vaues in .csv file for further processing
write.csv(t(ex1[-1]), "File_name.csv", row.names = idx)
Самый простой способ прочитать файл.nc во фрейм данных в R - это tidync. Делается это легко. Вероятно, вам придется управлять временем вручную на основе вашего календаря. Я не думаю, что в настоящее время tidync может их декодировать. Если я прав, в файлах, которые вы используете, есть календарь, в котором даты сохраняются как количество дней, прошедших с 1 января 1978 года. Таким образом, вам нужно будет рассчитать даты в каждом файле на основе этого. Следующее должно работать:
tidync::tidync("sst.mnmean.nc") %>%
tidync::hyper_tibble() %>%
mutate(date = lubridate::ymd("1978/01/01") + lubridate::days(time))