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)
4 数据转换
4.1 读写与转换
从上边对数据读取的过程中,我们发现数据的原始结构是按照lon
、lat
和time
排列的,所以将数据通过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数据展示
参考网址:Convert_nc_to_RDdata