R||*.nc文件怎么转换为*.Rdata文件

1 说在前面

有时候在处理*.nc文件时,为了计算的需要,往往需要把*.nc格式的文件转换为别的格式如*.RData。最好的存储R中数据的格式是保存为*.RData(也称为*.rda文件),它是R专属的文件,可以保存海量文件。有以下两个优点:

  • 将数据恢复到R中速度更快(it is faster to restore the data to R)
  • 它将 R 特定信息编码在数据中(例如,属性、变量类型等)

2 多维数组

首先我们生成一个三维数组认识一下多维数组的基本结构,了解多维数组是怎么构成的:

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))
三维数组

接下来我们将时间维度数据进行时间命名,例如"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))
三维数组-时间

3 数据结构

下面以HadISST数据为例记录一下*.nc数据的读取,数据集保存为HadISST_sst.nc,可以从这个数据网址下载获得。

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实现)

4 数据转换

4.1 读写与转换

从上边对数据读取的过程中,我们发现数据的原始结构是按照lonlattime排列的,所以将数据通过R转换为list数据的时候注意顺序,即dimnames(dat) <- list(lon = varlon, lat = varlat, time = vartime);由于结合第2部分多维数组的介绍,根据上边对数据结构的分析,在这里注意两点,就是按照时间第三个维度进行融合,所以选取时间序列数据的时候应该是dat[[3]],具体dat的结构展示可以自行运行结果展示。另外从读取的数据结构展示出来原始数据结构如下图:

数据结构展示

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数据展示

Rdata数据结构

参考网址:Convert_nc_to_RDdata

你可能感兴趣的:(R||*.nc文件怎么转换为*.Rdata文件)