【发布时间】:2017-05-08 18:02:06
【问题描述】:
一般来说,我对编码很陌生,但我将 R 用于论文项目。 我有一个 netcdf 文件,其中包含从 1979 年到 2016 年覆盖整个哈萨克斯坦的每日温度数据,经纬度为 0.75 度。这 3 个维度是时间(大小 13696)、纬度(大小 21)和经度(大小61)。自 1900 年以来,时间一直以秒为单位。
有没有办法获得新的月平均值数组?
我能想到的唯一方法是一种非常低效的方法,现在它已经停止工作了。我的代码如下:
mon.av <- array(dim = c(61,21,444))
for(years in 1:37) {
if(years == 1) {
for(x in 1:61){
for(y in 1:21){
mon.av[x, y, 1+(12*(years-1))] <- mean(m2tmp[x, y, 1+(years - 1)* 365:31+(years-1)*365])
mon.av[x, y, 2+(12*(years-1))] <- mean(m2tmp[x, y, 32+(years - 1)* 365:59+(years-1)*365])
mon.av[x, y, 3+(12*(years-1))] <- mean(m2tmp[x, y, 60+(years - 1)* 365:90+(years-1)*365])
mon.av[x, y, 4+(12*(years-1))] <- mean(m2tmp[x, y, 91+(years - 1)* 365:120+(years-1)*365])
mon.av[x, y, 5+(12*(years-1))] <- mean(m2tmp[x, y, 121+(years - 1)* 365:151+(years-1)*365])
mon.av[x, y, 6+(12*(years-1))] <- mean(m2tmp[x, y, 152+(years - 1)* 365:181+(years-1)*365])
mon.av[x, y, 7+(12*(years-1))] <- mean(m2tmp[x, y, 182+(years - 1)* 365:212+(years-1)*365])
mon.av[x, y, 8+(12*(years-1))] <- mean(m2tmp[x, y, 213+(years - 1)* 365:243+(years-1)*365])
mon.av[x, y, 9+(12*(years-1))] <- mean(m2tmp[x, y, 244+(years - 1)* 365:273+(years-1)*365])
mon.av[x, y, 10+(12*(years-1))] <- mean(m2tmp[x, y, 274+(years - 1)* 365:304+(years-1)*365])
mon.av[x, y, 11+(12*(years-1))] <- mean(m2tmp[x, y, 305+(years - 1)* 365:334+(years-1)*365])
mon.av[x, y, 12+(12*(years-1))] <- mean(m2tmp[x, y, 335+(years - 1)* 365:365+(years-1)*365])
}
}
}
}
我必须将其复制出来并将 if(years == 1) 更改为年份编号,并且还必须更改闰年!
直到 20 年出现错误消息时,这似乎都可以正常工作:
m2tmp[x, y, 1 + (years - 1) * 365:31 + (years - 1) * 365] 中的错误: 下标越界
所以我想知道是否有更简单的方法来获取此数据的月平均值,或者如果没有,我的代码中的错误是什么?
非常感谢任何帮助!
【问题讨论】:
-
你用
ncdf4吗? -
抱歉!是的,我使用 ncdf4。