R語(yǔ)言雜談:給粉絲處理CMIP6的NC數(shù)據(jù)|提取東三省2015-2100平均溫度降水
前幾天有同學(xué)問我按照我的代碼跑不出來,我跑的時(shí)候從沒見過那個(gè)報(bào)錯(cuò),我也很好奇為什么,然后就和他說等我最近忙完畢業(yè)論文再給他看看,然后最近正好提交系統(tǒng)外審,閑下來就跑了一下他的數(shù)據(jù)。解決完后發(fā)現(xiàn)有幾點(diǎn)問題可以記錄一下。
他的數(shù)據(jù)是CMIP6(做遙感的同學(xué)肯定不陌生),目的是提取東三省2015-2100的平均溫度降水。

這個(gè)報(bào)錯(cuò)看起來是在導(dǎo)出柵格的時(shí)候,出現(xiàn)了一對(duì)多的問題。
后面我繼續(xù)和這位同學(xué)溝通,發(fā)現(xiàn)他是一個(gè)大四的非農(nóng)林專業(yè)的同學(xué),對(duì)R語(yǔ)言以及遙感相當(dāng)不熟練,無奈之下我只能問他可否把東三省的矢量和CMIP的nc數(shù)據(jù)發(fā)我一份我跑一下試試
(其實(shí)一開始我是想自己下,盡量避免拿別人的數(shù)據(jù),但是CMIP下載實(shí)在是太慢了,東三省矢量我還得從全國(guó)shp里提取,也怕和他的研究區(qū)不一致,為了節(jié)約時(shí)間,只能讓他發(fā)我了)

拿降水的nc數(shù)據(jù)舉例

從這個(gè)基本信息中我們可以得知:這是一個(gè)擁有1032個(gè)圖層(nlyr是n個(gè)layer是縮寫)的柵格,儲(chǔ)存著從2015年1月到2100年12月的逐月降水(Precipitation),注意它的單位是kg/m2/s。

關(guān)于坐標(biāo)系的內(nèi)容可以查閱這篇專欄。

然后在導(dǎo)入他的研究區(qū)矢量范圍的時(shí)候發(fā)現(xiàn)居然沒有坐標(biāo)系信息


所以只能把shp定義一個(gè)坐標(biāo)系,為了方便期間,直接用nc的坐標(biāo)系
然后再看看nc柵格和shp的范圍,探索一下


下一步就是按照矢量范圍提取柵格均值
這一行的意思是,把pr這個(gè)nc數(shù)據(jù)先裁剪成東三省shp的外接矩形大?。ㄓ胻erra包的crop函數(shù)),再把這個(gè)外接矩形掩膜呈shp的形狀(用terra包的mask函數(shù)),再提取這個(gè)shp形狀的1032個(gè)圖層的均值。最后會(huì)得到一個(gè)1032行的數(shù)據(jù)框,然后把它命名為df_pr。
(%>%是管道符號(hào),表示前面的結(jié)果可以作為后面函數(shù)的輸入)
至于為什么要先crop再mask可以參考下面的專欄。


通過head函數(shù),我們可以看到基本上沒有什么錯(cuò)誤,可以進(jìn)一步對(duì)數(shù)據(jù)框進(jìn)行操作。
目前這個(gè)數(shù)據(jù)框一共有1032行,1列,行代表特定的年月,比如第一行pr_1代表2015年的1月,最后一行pr_1032代表2100年的12月,列表示東三省的降水均值,所以我們可以給她添加一列“年”以及一列“月”,來補(bǔ)充信息。

然后用openxlsx包的write.xlsx函數(shù)導(dǎo)出為xlsx

總結(jié):
不要給我發(fā)任何關(guān)于你自己的涉密數(shù)據(jù)?。?!尤其是你自己做實(shí)驗(yàn)得來的數(shù)據(jù),但公開下載的數(shù)據(jù)可以發(fā)給我以便節(jié)省時(shí)間(比如MODIS,CMIP6這種誰(shuí)都可以下載的)。因?yàn)槲易约涸趯W(xué)習(xí)初期請(qǐng)教別人的時(shí)候就發(fā)了好多我自己的關(guān)于我論文的數(shù)據(jù),有的重要有的不重要,但是后來我小論文一直進(jìn)展不順利,遲遲沒有發(fā)表,等我想投的時(shí)候發(fā)現(xiàn)已經(jīng)有類似的了,作者和我當(dāng)初請(qǐng)教的那個(gè)人是一個(gè)單位,甚至研究區(qū)和數(shù)據(jù)來源都一模一樣,處理方法也和我的一致,很難不讓人多想。由此導(dǎo)致的后果就是我不得不調(diào)整我的小論文結(jié)構(gòu),重新?lián)Q題。
處理數(shù)據(jù)的過程中可能會(huì)有很多報(bào)錯(cuò),可以先把報(bào)錯(cuò)內(nèi)容搜索一下,探究一下是什么樣的原因。