R-NC格式數(shù)據(jù)讀取及預(yù)處理

0 . 示例數(shù)據(jù)

NC示例數(shù)據(jù)下載
注:截取其中前10個數(shù)據(jù)用于數(shù)據(jù)處理流程說明。

1.所需軟件包

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

1. NC 文件數(shù)據(jù)導(dǎo)入

NC文件是用于儲存多維數(shù)據(jù)的一種柵格數(shù)據(jù)格式,地理學(xué)方面,其內(nèi)往往包括longitude, latitude 及對應(yīng)的參數(shù),其中參數(shù)可以是一個也可以是很多個。以今天的數(shù)據(jù)為例,其中參數(shù)包括如下:

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數(shù)據(jù)往往會包含很多個(如今天示例中會有5個),構(gòu)成一個時間序列,其中比較典型的就是降水,氣溫等。而通常來說,我們也需要去分析其中某個參數(shù)的時間序列。因此,在處理NC數(shù)據(jù)的第一步就是將其從NC文件中提取出來。但如果說我們依靠循環(huán)去遍歷NC格式的話,不是不可以,就是相當(dāng)費勁。特別是當(dāng)我們需要提取的變量之間在NC中儲存的順序不連續(xù)的時候。慶幸的是,raster-package 中的raster與stack工具可以很方便地幫我們導(dǎo)入我們需要的變量。

# 1. 獲取變量名
setwd('E:\\簡書項目\\20191007-NC數(shù)據(jù)處理\\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通過此函數(shù)可以獲得上述的變量名縮寫
# 獲取變量名全稱方法如下,以TG_R 變量為例
files_nc$var$TG_R$longname
[1] "Rural ground temperature"
#2. 導(dǎo)入單個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數(shù)據(jù)處理/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單個柵格數(shù)據(jù)
# 3. 導(dǎo)入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 文件數(shù)據(jù)預(yù)處理

當(dāng)我們通過raster/stack將對應(yīng)的變量導(dǎo)入R之后,如果我們需要進一步對其進行切片處理,如統(tǒng)計分布、篩選等,我們可以通過as.data.frame 含函數(shù)將其轉(zhuǎn)化為data.frame,然后再進一步處理。

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

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