问题描述
我有一个带气候数据的netcdf文件。我使用全景(https://www.giss.nasa.gov/tools/panoply/)进行了探索,在其中看到了以下变量:
- lat(1D)-每个网格单元中的参考纬度列表
- lat_bnds(2D)-每个网格单元的两列最小/最大纬度
- lon(1D)-与经纬度相同,但经度
- lon_bnds(2D)-与经度相同lat_bnds
- tas(Geo2D;近地面气温)
- 时间(1D):变量tas的第3维中的时间步长列表
- time_bnds(2D):两列,其最大/最小时间范围为tas第三维度
我现在需要使用R提取这些变量。
ncpath <- ("[PATH WHERE FILE IS SAVED]")
ncfname <-paste(ncpath,'[FILENAME].nc',sep = '')
ncin <- nc_open(ncfname) # open netcdf file
view(ncin) # to see the structure of the netcdf,which is messier than what appears in panoply
- 文件名(带有路径+文件名的字符串)
- 可写(TRUE / FALSE)
- Id(一个我不知道的数字)
- 安全模式(TRUE / FALSE)
- 格式(“ NC_FORMAT_NETCDF4_CLASSIC”)
- Is_GMT(TRUE / FALSE)
- 组(带有其他变量的列表):id / name / ndims / nvars / natts / dimid / fqgn(每个变量只有一个整数;不知道它们到底是什么)
- Fqgn2Rindex(带有其他变量的列表):只有一个带有整数4的变量“ [1]”(不知道这是什么)
- Ndims(维度数:4)
- Natts(属性数:1)
- 暗淡(带有其他变量的列表):->这是存储时间/经度/经度的地方
- 时间:名称/ len / unlim / group_index / group_id / id / units / calendar / vals / create_dimvar / dimvarid(最后一个是另一组看起来很混乱的变量)
- 界限:与上面类似的列表,但变量“ vals” = [1,2],因此此处没有坐标限制
- 拉特(请参阅此here的屏幕截图)
- Lon(没有屏幕截图,但与lat类似)
- Time_bnds:这是另一组变量,仅包含维数和一些混乱情况-不知道为什么它在上面的“ var”下而不是在“ time”下
- Lat_bnds:我已经完成了此here)的屏幕截图
- Lon_bnds:没有屏幕截图,与lat相似
- Tas(数据本身不包含经度/纬度)
全屏使用: 变量lat_bnds(我最感兴趣的变量)以CSV格式提取时,看起来像: two columns of min/max latitude ranges. Size: 128*2
在R中:
ncin[["dim"]][["lat"]][["vals"]]”
-87.863799 -85.096527 -82.312913 -79.525607 -76.736900 -73.947515 -71.157752 -68.367756 -65.577607 -62.787352 -59.997020 -57.206632 -54.416200 -51.625734 -48.835241 -46.044727 -43.254195 -40.463648 -37.673090 -34.882521 -32.091944 -29.301360 -26.510769 -23.720174 -20.929574 -18.138971 -15.348365 -12.557756 -9.767146 -6.976534 -4.185921 -1.395307 1.395307 4.185921 6.976534 9.767146 12.557756 15.348365 18.138971 20.929574 23.720174 26.510769 29.301360 32.091944 34.882521 37.673090 40.463648 43.254195 46.044727 48.835241 51.625734 54.416200 57.206632 59.997020 62.787352 65.577607 68.367756 71.157752 73.947515 76.736900 79.525607 82.312913 85.096527 87.863799
ncin[["var"]][["lat_bnds"]][["dim"]][[2]][["vals"]]
-87.863799 -85.096527 -82.312913 -79.525607 -76.736900 -73.947515 -71.157752 -68.367756 -65.577607 -62.787352 -59.997020 -57.206632 -54.416200 -51.625734 -48.835241 -46.044727 -43.254195 -40.463648 -37.673090 -34.882521 -32.091944 -29.301360 -26.510769 -23.720174 -20.929574 -18.138971 -15.348365 -12.557756 -9.767146 -6.976534 -4.185921 -1.395307 1.395307 4.185921 6.976534 9.767146 12.557756 15.348365 18.138971 20.929574 23.720174 26.510769 29.301360 32.091944 34.882521 37.673090 40.463648 43.254195 46.044727 48.835241 51.625734 54.416200 57.206632 59.997020 62.787352 65.577607 68.367756 71.157752 73.947515 76.736900 79.525607 82.312913 85.096527 87.863799
问题:我无法在R中提取lat_bnds变量,因为我只能获得与在panoply中(以及在R中-的lat变量)相同的纬度字符串以上提取)。任何对我做错事的帮助将不胜感激!
解决方法
使用适当的函数ncdf4::ncvar_get
提取变量似乎可行:
df <- ncdf4::nc_open(filename = "MIROC-ES2L_LGM_moclim_tas.nc")
ncdf4::ncvar_get(df,"lat_bnds")
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] -90.00000 -86.57775 -83.75703 -80.95502 -78.15835 -75.36394 -72.57070 -69.77815 -66.98603 -64.19420 -61.40258 -58.61111 -55.81976
[2,] -86.57775 -83.75703 -80.95502 -78.15835 -75.36394 -72.57070 -69.77815 -66.98603 -64.19420 -61.40258 -58.61111 -55.81976 -53.02849
[,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
[1,] -53.02849 -50.23730 -47.44615 -44.65506 -41.86400 -39.07297 -36.28196 -33.49098 -30.70002 -27.90906 -25.11813 -22.32720 -19.53628
[2,] -50.23730 -47.44615 -44.65506 -41.86400 -39.07297 -36.28196 -33.49098 -30.70002 -27.90906 -25.11813 -22.32720 -19.53628 -16.74537
[,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38] [,39]
[1,] -16.74537 -13.95447 -11.163569 -8.372673 -5.581781 -2.79089 0.00000 2.790890 5.581781 8.372673 11.16357 13.95447 16.74537
[2,] -13.95447 -11.16357 -8.372673 -5.581781 -2.790890 0.00000 2.79089 5.581781 8.372673 11.163569 13.95447 16.74537 19.53628
[,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50] [,51] [,52] [,53]
[1,] 19.53628 22.32720 25.11813 27.90906 30.70002 33.49098 36.28196 39.07297 41.86400 44.65506 47.44615 50.23730 53.02849 55.81976
[2,] 22.32720 25.11813 27.90906 30.70002 33.49098 36.28196 39.07297 41.86400 44.65506 47.44615 50.23730 53.02849 55.81976 58.61111
[,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61] [,62] [,63] [,64]
[1,] 58.61111 61.40258 64.19420 66.98603 69.77815 72.57070 75.36394 78.15835 80.95502 83.75703 86.57775
[2,] 61.40258 64.19420 66.98603 69.77815 72.57070 75.36394 78.15835 80.95502 83.75703 86.57775 90.00000
ncdf4::ncvar_get(df,"lat")
[1] -87.863799 -85.096527 -82.312913 -79.525607 -76.736900 -73.947515 -71.157752 -68.367756 -65.577607 -62.787352 -59.997020
[12] -57.206632 -54.416200 -51.625734 -48.835241 -46.044727 -43.254195 -40.463648 -37.673090 -34.882521 -32.091944 -29.301360
[23] -26.510769 -23.720174 -20.929574 -18.138971 -15.348365 -12.557756 -9.767146 -6.976534 -4.185921 -1.395307 1.395307
[34] 4.185921 6.976534 9.767146 12.557756 15.348365 18.138971 20.929574 23.720174 26.510769 29.301360 32.091944
[45] 34.882521 37.673090 40.463648 43.254195 46.044727 48.835241 51.625734 54.416200 57.206632 59.997020 62.787352
[56] 65.577607 68.367756 71.157752 73.947515 76.736900 79.525607 82.312913 85.096527 87.863799