三维矩阵R的平均值

5

I have a 3d array like this

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)

非常感谢


我不确定我完全理解,但是像 apply(datamonth, c(1,2), mean) 这样的东西可能可以检查一下? - alexis_laz
2个回答

8

请执行以下操作:

rowMeans(datamonth, dims = 2)

这将会比原来快很多

apply(datamonth, c(1,2), mean)

3

关于@flodel的解决方案,添加详细说明:

'apply(datamonth, c(1,2), mean)' 解决方案将计算3D数组的第三个维度的平均值。

最初的回答:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接