【发布时间】:2016-01-28 13:36:49
【问题描述】:
我使用存储一个变量并具有以下维度的 netCDF 文件:经度、纬度、时间。 一般来说,我希望将它与我已经在 R 中存储为数据框的不同数据进行比较 - 前两列是 WGS84 中的坐标,接下来是特定时间的值。
所以我写了以下代码。
# since # ncFile$dim$time$units say: [1] "days since 1900-1-1"
daysFromDate <- function(data1, data2="1900-01-01")
{
round(as.numeric(difftime(data1,data2,units = "days")))
}
#study area:
lon <- c(40.25, 48)
lat <- c(16, 24.25)
myTime <- c(daysFromDate("2008-01-16"), daysFromDate("2011-12-31"))
varName <- "spei"
require(ncdf4)
require(RCurl)
x <- getBinaryURL("http://digital.csic.es/bitstream/10261/104742/3/SPEI_01.nc")
ncFile <- nc_open(x)
LonIdx <- which( ncFile$dim$lon$vals >= lon[1] | ncFile$dim$lon$vals <= lon[2])
LatIdx <- which( ncFile$dim$lat$vals >= lat[1] & ncFile$dim$lat$vals <= lat[2])
TimeIdx <- which( ncFile$dim$time$vals >= myTime[1] & ncFile$dim$time$vals <= myTime[2])
MyVariable <- ncvar_get( ncFile, varName)[ LonIdx, LatIdx, TimeIdx]
我认为将返回数据框,以便我能够轻松地操作数据(例如 - 检查相关性或创建绘图)。 不幸的是,已返回 3 维列表。 如何将其重新格式化为具有以下列 X-Y-Time1-Time2-...的数据框...
所以,示例数据如下所示
X Y 2014-01-01 2014-01-02 2014-01-02
50 17 0.5 0.4 0.3
其中 0.5、0.4 和 0.3 是示例变量值
或者可能有不同的解决方案?
【问题讨论】:
-
我强烈建议您使用
raster包。 -
@AF7 使用光栅包我将获得什么优势?会更容易/更好吗?
-
我发现它更容易。它非常直观,并且已经实现了许多用于层相关、裁剪、跨层数学、随机森林、绘图、重新映射、合并等功能。