3d矩阵R上的平均值

时间:2014-03-23 12:49:01

标签: r

我有一个像这样的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)

非常感谢

2 个答案:

答案 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