R-NC格式数据读取及预处理

0 . 示例数据

NC示例数据下载
注:截取其中前10个数据用于数据处理流程说明。

1.所需软件包

require(ncdf4)
require(raster)
#安装方法
install.packages('ncdf4')
install.packages('raster')

1. NC 文件数据导入

NC文件是用于储存多维数据的一种栅格数据格式,地理学方面,其内往往包括longitude, latitude 及对应的参数,其中参数可以是一个也可以是很多个。以今天的数据为例,其中参数包括如下:

1   mcdate  EFLX_LH_TOT_R   FSA_R   FSRVI   QIRRIG  SNOW    TREFMXAV_R
2   mcsec   EFLX_LH_TOT_U   FSA_U   GC_HEAT1    QOVER   SNOWDP  TREFMXAV_U
3   mdcur   ELAI    FSDS    GC_ICE1 QRGWL   SNOWICE TSA
4   mscur   ERRH2O  FSDSND  GC_LIQ1 QRUNOFF SNOWLIQ TSAI
5   nstep   ERRH2OSNO   FSDSNDLN    H2OCAN  QRUNOFF_NODYNLNDUSE SNOW_SINKS  TSA_R
6   time_bounds ERRSEB  FSDSNI  H2OSNO  QRUNOFF_R   SNOW_SOURCES    TSA_U
7   date_written    ERRSOI  FSDSVD  H2OSNO_TOP  QRUNOFF_U   SOILICE TSOI
8   time_written    ERRSOL  FSDSVDLN    H2OSOI  QSNOMELT    SOILLIQ TSOI_10CM
9   area    ESAI    FSDSVI  HC  QSNWCPICE   SOILWATER_10CM  TSOI_ICE
10  topo    FCEV    FSH HCSOI   QSNWCPICE_NODYNLNDUSE   SoilAlpha   TV
11  landfrac    FCOV    FSH_G   HEAT_FROM_AC    QSOIL   SoilAlpha_U U10
12  landmask    FCTR    FSH_NODYNLNDUSE LAISHA  QVEGE   TAUX    URBAN_AC
13  pftmask FGEV    FSH_R   LAISUN  QVEGT   TAUY    URBAN_HEAT
14  ZSOI    FGR FSH_U   OCDEP   RAIN    TBOT    WA
15  DZSOI   FGR12   FSH_V   PBOT    RH2M    TBUILD  WASTEHEAT
16  WATSAT  FGR_R   FSM PCO2    RH2M_R  TG  WIND
17  SUCSAT  FGR_U   FSM_R   Q2M RH2M_U  TG_R    WT
18  BSW FIRA    FSM_U   QBOT    SABG    TG_U    ZBOT
19  HKSAT   FIRA_R  FSNO    QCHARGE SABV    THBOT   ZWT
20  BCDEP   FIRA_U  FSR QDRAI   SNOBCMCL    TLAI    
21  BTRAN   FIRE    FSRND   QDRIP   SNOBCMSL    TLAKE   
22  BUILDHEAT   FLDS    FSRNDLN QFLX_ICE_DYNBAL SNODSTMCL   TREFMNAV    
23  DSTDEP  FPSN    FSRNI   QFLX_LIQ_DYNBAL SNODSTMSL   TREFMNAV_R  
24  DSTFLXT FSA FSRVD   QINFL   SNOOCMCL    TREFMNAV_U  
25  EFLX_DYNBAL FSAT    FSRVDLN QINTR   SNOOCMSL    TREFMXAV    

此外,NC数据往往会包含很多个(如今天示例中会有5个),构成一个时间序列,其中比较典型的就是降水,气温等。而通常来说,我们也需要去分析其中某个参数的时间序列。因此,在处理NC数据的第一步就是将其从NC文件中提取出来。但如果说我们依靠循环去遍历NC格式的话,不是不可以,就是相当费劲。特别是当我们需要提取的变量之间在NC中储存的顺序不连续的时候。庆幸的是,raster-package 中的raster与stack工具可以很方便地帮我们导入我们需要的变量。

# 1. 获取变量名
setwd('E:\\简书项目\\20191007-NC数据处理\\test-nnu\\hist') #引号中为文件储存地址
files = list.files(full.names = T) 获取
print(files[1]) 
[1] "./B1850.f19_g16.001.clm2.h0.0001-01.nc"
files_nc = ncdf4::nc_open(files[1])
name_files_nc = names(files_nc$var) #t通过此函数可以获得上述的变量名缩写
# 获取变量名全称方法如下,以TG_R 变量为例
files_nc$var$TG_R$longname
[1] "Rural ground temperature"
#2. 导入单个NC文件,以变量TG_R为例
nc_raster = raster(files[1], varname = 'TG_R')

nc_raster
class      : RasterLayer 
dimensions : 96, 144, 13824  (nrow, ncol, ncell)
resolution : 2.5, 1.894737  (x, y)
extent     : -1.25, 358.75, -90.94737, 90.94737  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
source     : E:/简书项目/20191007-NC数据处理/test-nnu/hist/B1850.f19_g16.001.clm2.h0.0001-01.nc 
names      : Rural.ground.temperature 
z-value    : 0001-02-01 
zvar       : TG_R 

TG_R单个栅格数据
# 3. 导入TG_R变量的时间序列
tgr_ts = stack(files[1:5],varname = 'TG_R')
tgr_ts
class      : RasterStack 
dimensions : 96, 144, 13824, 5  (nrow, ncol, ncell, nlayers)
resolution : 2.5, 1.894737  (x, y)
extent     : -1.25, 358.75, -90.94737, 90.94737  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
names      : Rural.ground.temperature.1, Rural.ground.temperature.2, Rural.ground.temperature.3, Rural.ground.temperature.4, Rural.ground.temperature.5 

TG_R时间序列

2. NC 文件数据预处理

当我们通过raster/stack将对应的变量导入R之后,如果我们需要进一步对其进行切片处理,如统计分布、筛选等,我们可以通过as.data.frame 含函数将其转化为data.frame,然后再进一步处理。

# 4. 将单个raster文件转化为data.frame
df_tgr = as.data.frame(nc_raster,xy = T)
head(df_tgr)
     x  y Rural.ground.temperature
1  0.0 90                       NA
2  2.5 90                       NA
3  5.0 90                       NA
4  7.5 90                       NA
5 10.0 90                       NA
6 12.5 90                       NA
# 5. 将stack文件转化为data.frame
df_tgr_ts = as.data.frame(tgr_ts,xy = T)
head(df_tgr_ts)
    x  y Rural.ground.temperature.1 Rural.ground.temperature.2 Rural.ground.temperature.3
1  0.0 90                         NA                         NA                         NA
2  2.5 90                         NA                         NA                         NA
3  5.0 90                         NA                         NA                         NA
4  7.5 90                         NA                         NA                         NA
5 10.0 90                         NA                         NA                         NA
6 12.5 90                         NA                         NA                         NA
  Rural.ground.temperature.4 Rural.ground.temperature.5
1                         NA                         NA
2                         NA                         NA
3                         NA                         NA
4                         NA                         NA
5                         NA                         NA
6                         NA                         NA
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。