R||*.nc文件怎么轉(zhuǎn)換為*.Rdata文件

1 說(shuō)在前面

有時(shí)候在處理*.nc文件時(shí),為了計(jì)算的需要,往往需要把*.nc格式的文件轉(zhuǎn)換為別的格式如*.RData。最好的存儲(chǔ)R中數(shù)據(jù)的格式是保存為*.RData(也稱(chēng)為*.rda文件),它是R專(zhuān)屬的文件,可以保存海量文件。有以下兩個(gè)優(yōu)點(diǎn):

  • 將數(shù)據(jù)恢復(fù)到R中速度更快(it is faster to restore the data to R)
  • 它將 R 特定信息編碼在數(shù)據(jù)中(例如,屬性、變量類(lèi)型等)

2 多維數(shù)組

首先我們生成一個(gè)三維數(shù)組認(rèn)識(shí)一下多維數(shù)組的基本結(jié)構(gòu),了解多維數(shù)組是怎么構(gòu)成的:

dim1 <- c("lon1","lon2")
dim2 <- c("lat1","lat2","lat3")
dim3 <- c("time1","time2","time3","time4")

z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
三維數(shù)組

接下來(lái)我們將時(shí)間維度數(shù)據(jù)進(jìn)行時(shí)間命名,例如"2022-01-01","2022-02-01","2022-03-01","2022-04-01".

start <- ymd("2022-01-01")
end <- ymd("2022-03-01")
time <- as.character(seq(start,end, by ="month"))

lon <- c("lon1","lon2")
lat <- c("lat1","lat2","lat3")

z <- array(1:24,c(2,3,4),dimnames = list(lon,lat,time))
三維數(shù)組-時(shí)間

3 數(shù)據(jù)結(jié)構(gòu)

下面以HadISST數(shù)據(jù)為例記錄一下*.nc數(shù)據(jù)的讀取,數(shù)據(jù)集保存為HadISST_sst.nc,可以從這個(gè)數(shù)據(jù)網(wǎng)址下載獲得。

rm(list=ls(all=TRUE))

library(ncdf4)
library(abind)
library(lubridate)
library(tidyverse)

setwd('~/../file')
nc <- nc_open('HadISST_sst.nc') 
print(nc) 

lon-lat-time-sst(為了方便展示用python實(shí)現(xiàn))

4 數(shù)據(jù)轉(zhuǎn)換

4.1 讀寫(xiě)與轉(zhuǎn)換

從上邊對(duì)數(shù)據(jù)讀取的過(guò)程中,我們發(fā)現(xiàn)數(shù)據(jù)的原始結(jié)構(gòu)是按照lon、lattime排列的,所以將數(shù)據(jù)通過(guò)R轉(zhuǎn)換為list數(shù)據(jù)的時(shí)候注意順序,即dimnames(dat) <- list(lon = varlon, lat = varlat, time = vartime);由于結(jié)合第2部分多維數(shù)組的介紹,根據(jù)上邊對(duì)數(shù)據(jù)結(jié)構(gòu)的分析,在這里注意兩點(diǎn),就是按照時(shí)間第三個(gè)維度進(jìn)行融合,所以選取時(shí)間序列數(shù)據(jù)的時(shí)候應(yīng)該是dat[[3]],具體dat的結(jié)構(gòu)展示可以自行運(yùn)行結(jié)果展示。另外從讀取的數(shù)據(jù)結(jié)構(gòu)展示出來(lái)原始數(shù)據(jù)結(jié)構(gòu)如下圖:

數(shù)據(jù)結(jié)構(gòu)展示

file <- '~/../HadISST_sst.nc'
path <- '~/../file'

dat <- nc_open(file) %>% ncvar_get('sst')
dims <- dim(dat)

varlat <- nc_open(file) %>% ncvar_get('latitude')
varlon <- nc_open(file) %>% ncvar_get('longitude')
# vartime <- nc_open(file) %>% ncvar_get('time')
start <- ymd("1870-01-01")
end <- ymd("2020-04-01")
vartime <- as.character(seq(start,end, by ="month"))

dimnames(dat) <- list(lon = varlon, lat = varlat, time = vartime)

4.2 保存

sst <- dat
outfile <- paste0(path, 'sst.Rdata')
save(sst, file=outfile)

4.3 RData數(shù)據(jù)展示

Rdata數(shù)據(jù)結(jié)構(gòu)

參考網(wǎng)址:Convert_nc_to_RDdata

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容