我有一个像这样的3D数组
datamonth <- array(0, dim = c(length(LONG),length(LATG),length(YEAR)))
>dim(datamonth)
[1] 361 181 30
其中前两个维度是经度和纬度(我有1度间隔网格)。我想要做的是计算每个网格点的datamonth的平均值,例如
Cell 1
LON -180 -179
LAT -90 -89
year 1: MeanCell1_yr
year 2: MeanCell1_yr .
.
.
year 30: MeanCell1_yr
MeanCell1TOT = mean(MeanCell1_yr)
非常感谢
答案 0 :(得分:3)
这样做:
rowMeans(datamonth, dims = 2)
比
快很多apply(datamonth, c(1,2), mean)
答案 1 :(得分:0)
只需添加有关@flodel解决方案的详细说明:
'apply(datamonth,c(1,2),mean)'解决方案将沿着3D数组的第3维计算平均值。
avgData1 <- apply(datamonth, c(1,2), mean)
此解决方案与以下多行代码等效:
dataList <- list()
for (i in 1:dim(datamonth)[3]){
dataList[[l]] <- datamonth[,,i]
}
avgData2 <- Reduce('+', dataList)/length(dataList)
# check whether avgData1 and avgData2 are equal or not?
sum(avgData1-avgData2) # the difference should be 0