如何将3列数据帧保存到R中的NetCDF文件中?

时间:2018-03-23 08:22:25

标签: r raster netcdf

我有一个Nx3 tibble我想保存到NetCDF(.nc)文件。 tibble有三列:

  1. 经度(lon)
  2. 纬度(纬度)
  3. 每个点的数据(var)
  4. 如何将其保存到R中的NetCDF(.nc)文件?到目前为止,我一直在使用带有混合结果的 raster 包:

    # Be careful to call raster and dplyr in this specific order.
    require(raster)
    require(dplyr)
    set.seed(10)
    df <- expand.grid(lon = 1:10, lat=1:10) %>% as_tibble() %>% mutate(var1 = rnorm(100))
    
    val <- df %>% select(var1) %>% pull()
    
    coordinates(df) <- ~ lon + lat
    gridded(df) <- TRUE
    raster_df <- raster::raster(df)
    projection(raster_df) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84")
    setValues(raster_df, val)
    writeRaster(raster_df,
                filename = "file.nc",
                varname = "var1",
                format = "CDF")
    

    我对此解决方案唯一的问题是它似乎不会产生一致的输出。有时文件有时会被破坏(即我不能再次打开它们)而且有趣的是,它们都是相同的大小,根据原始数据并非完全相同(除了可能的经度和纬度)之外根本不应该是这种情况

    我正在使用:

    1. 在Windows 10上的R 3.4.1。
    2. dplyr 0.7.4
    3. raster 2.6-7
    4. 我愿意使用此方法的其他替代方法(或其他包)。

1 个答案:

答案 0 :(得分:2)

你的例子似乎涉及很多不必要的箍。这是一个更简单的版本:

- hosts: all
  become: true
  tasks:

  - name: copy icinga2 2.7.2
    synchronize:
      src: /home/ansible/playbooks/files/icinga2.7
      dest: /home/ansible
      owner: yes

这似乎工作正常。

您的代码中存在一个明显的错误:library(raster) set.seed(10) r <- raster(xmn=0.5, xmx=10.5, ymn=0.5, ymx=10.5, nrow=10, ncol=10, vals=rnorm(100)) z <- writeRaster(r, filename = "file.nc", varname = "var1") z 。 这应该是setValues(raster_df, val)raster_df <- setValues(raster_df, val)