我有一个netCDF文件,我正在尝试识别文件中的第一个日期和基准日期'。该文件包含每月数据。我的笔记相当陈旧,表明第一个日期是1948年1月1日。
以下R
代码的第一个日期为17067072:
library(ncdf)
library(chron)
my.data <- open.ncdf('my.netCDF.nc')
x = get.var.ncdf(my.data, "lon" )
y = get.var.ncdf(my.data, "lat" )
z = get.var.ncdf(my.data, "time")
z[1:5]
# [1] 17067072 17067816 17068512 17069256 17069976
我下载了一个名为ncdump.exe
的应用程序,并在Windows命令窗口中输入以下行:
C:\Users\Mark W Miller\ncdump>ncdump -h my.netCDF.nc
我了解到基准日期是:
time:units = "hours since 1-1-1 00:00:0.0" ;
使用以下方法在R中获得相同的基础数据:
att.get.ncdf(my.data,"time","units")$value
[1] "hours since 1-1-1 00:00:0.0"
我尝试使用以下R
代码验证:
date1 <- as.Date("01/01/0001", "%m/%d/%Y")
date1
# [1] "0001-01-01"
date2 <- as.Date("01/01/1948", "%m/%d/%Y")
date2
# [1] "1948-01-01"
period <- as.Date(date1:date2, origin = "00-01-01")
hours <- 24 * (length(period)-1)
hours
# [1] 17067024
z[1]
中的数字与上面R
代码返回的数字相差48小时:
17067072 - 17067024
[1] 48
我的错误在哪里?由于netCDF文件包含月度数据,我怀疑第一个日期是1948年1月3日。我下载数据的网站不提供选择月内日期的选项。
可以从此处下载应用程序ncdump.exe
:
http://www.narccap.ucar.edu/data/ascii-howto.html
如果我能弄清楚如何对netCDF文件进行子集化,我可能会在某处上传较小的文件。
感谢您的任何建议。
答案 0 :(得分:1)
你看过你的period
向量了吗?当我看到前几个和最后几个值时,这一年出现的事情是没有意义的。可能有些东西在其中一次转换中搞砸了。
另请注意,相同的计算机程序将1900视为闰年,即使它不是,因此该系数的2个程序之间的差异可能占您差异中的24小时。