我想通过定义经度/纬度网格框来计算我定义的数据区域的空间平均值 .
我的数据是ECMWF海冰数据,因此它是整个北半球每个.75x.75 lon / lat坐标的时空数据 . 我已经将数据从NetCDF格式更改为R数据帧,因此head(var.df)看起来像这样:列,日期,经度,纬度,值
date_time lon lat ci
1 2016-01-01 18:00:00 0 87.75 1
2 2016-01-02 18:00:00 0 87.75 1
3 2016-01-03 18:00:00 0 87.75 1
4 2016-01-04 18:00:00 0 87.75 1
5 2016-01-05 18:00:00 0 87.75 1
6 2016-01-06 18:00:00 0 87.75 1
因此,北半球的每个lon / lat坐标都有一个值(df按日期排序,而不是由于某种原因而排序) .
我如何提取我想要的空间区域,即
BK <- subset(var.df,lon <= 30 & lon >= 105 & lat >= 70 & lat <= 80)
然后平均每个时间步(天)内该区域内的所有值?所以我有一个我定义的网格箱的意思 .
在此先感谢,我希望这不是非常严厉 .
Update
使用下面的GGamba建议代码,我得到了以下输出,同一天有多个值,因此它没有按时间片平均整个区域 .
date_time binlat binlon mean
<dttm> <fctr> <fctr> <dbl>
1 2016-01-01 18:00:00 [80,90) [0,10) 0.4200042
2 2016-01-01 18:00:00 [80,90) [10,20) 0.4503899
3 2016-01-01 18:00:00 [80,90) [20,30) 0.5614429
4 2016-01-01 18:00:00 [80,90) [30,40) 0.6118528
5 2016-01-01 18:00:00 [80,90) [40,50) 0.5809092
6 2016-01-01 18:00:00 [80,90) [50,60) 0.5617919
7 2016-01-01 18:00:00 [80,90) [60,70) 0.6071370
8 2016-01-01 18:00:00 [80,90) [70,80) 0.6011818
9 2016-01-01 18:00:00 [80,90) [80,90] 0.5442770
10 2016-01-01 18:00:00 [80,90) NA 0.4120862
# ... with 610 more rows
我还必须在最后添加na.rm = TRUE到mean()函数,因为平均值是NA .
1 回答
使用
dplyr
我们可以这样做:数据:
结果:
这将创建两个新列,将
lat
和lon
合并到cut
函数中定义的bin中 .然后按
date_time
和新列分组并计算组上的ci
均值 .当然,您应该调整
cut
功能以满足您的需要 .