【问题标题】:how to extract value from four dimensional netCDF data in R?如何从 R 中的四维 netCDF 数据中提取值?
【发布时间】:2020-12-03 05:14:11
【问题描述】:

我一直在寻找这个很长一段时间,但仍然无法弄清楚。似乎光栅包是要提取的,但只能从二维数据中提取。

此四维数据示例,netCDF 文件包含连续三天(72 小时)的每小时压力级别(4 级)气温。 https://drive.google.com/file/d/1UIiX9-xHrtH2FT1torg53iPxyzLxSYQu/view?usp=sharing.

我只想在其对应的日期时间和海拔高度(压力水平)上提取某些点位置 (xy) 的温度。然后将此作为附加列添加到此参考数据中:

ref_df <- structure(list(Latitude = c(40.68, 45.64, 50.31, 51.17, 
44.493564), Longitude = c(96.29, 97.107, 98.21, 
100.67, 105.01), timestamp = c("2019-05-01 15:52:14", 
"2019-05-01 18:52:29", "2019-05-02 21:52:30", "2019-05-03 00:52:29", 
"2019-05-03 03:52:15"), altitude_hPa = c(530, 570, 590, 600, 
610)), class = "data.frame", row.names = c(NA, -5L)) 

我在下面尝试了这个Import 4 dimensional netCDF data into R: 但似乎不起作用。

library(ncdf4)
ncdata <- nc_open(ncfile)
temp <- ncvar_get(ncdata)
dim(temp) # this shows index of layers in each dimention, but how to link this?

如果有人可以提供帮助,我将不胜感激。蝙蝠

【问题讨论】:

    标签: r netcdf r-raster netcdf4


    【解决方案1】:

    raster 包是为 3 维数据(x、y 和时间)设置的,但您可以在第 4 维上循环。这里有lapply

    library(raster)
    xy <- matrix(c(96.29, 97.11, 98.21, 100.67, 105.01, 40.68, 45.64, 50.31, 51.17, 44.49), ncol=2)
    colnames(xy) <- c("lon", "lat")
    
    v <- lapply(1:4, function(i) {
          b <- brick("download.nc", level=i)
          s <-  extract(b, xy)
        })
    

    v 是一个包含四个元素的列表(每个压力级别一个)。每个元素都有一个矩阵,其行数与xy 相同,列数与download.nc 中的日期数相同

    或者像这样得到一个矩阵:

    v <- lapply(1:4, function(i) {
          b <- brick("download.nc", level=i)
          s <- cbind(level=i, extract(b, xy))
        })  
    
    vv <- do.call(rbind, v)
    
    vv[1:8, 1:3]
    #      level X2019.05.01.00.00.00 X2019.05.01.01.00.00
    #[1,]     1             259.8976             259.9743
    #[2,]     1             254.7902             255.7008
    #[3,]     1             250.4961             250.6820
    #[4,]     1             251.0643             250.8548
    #[5,]     1             250.0989             250.1968
    #[6,]     2             265.6487             265.6842
    #[7,]     2             258.4251             259.0856
    #[8,]     2             256.4043             256.4468
    

    【讨论】:

    • 谢谢,罗伯特·希曼斯!它让我非常接近。但是,如何仅为每个位置的相应日期时间和高度提取温度?而不是提取每个位置的所有海拔高度和日期时间。
    猜你喜欢
    • 2021-03-29
    • 2023-03-07
    • 2022-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多