<分区>
假设我有以下数据框,其中每个观察值代表二维空间中特定点的给定变量:
data = data.frame(col1 = c(1,2,3,4,5,6,7,8), col2 = c(2,3,'NA',5,6,7,8,9), col3 = c(3,4,5,6,7,8,9,10), col4 = c(2,3,4,1,2,6,7,8),
col5 = c(2,3,'NA','NA',6,7,8,9), col6 = c(1,2,3,5,6,7,8,9), col7 = c(1,2,3,4,6,7,'NA','NA'), col8 = c(1,2,3,4,5,6,'NA','NA'))
> print(data)
col1 col2 col3 col4 col5 col6 col7 col8
1 1 2 3 2 2 1 1 1
2 2 3 4 3 3 2 2 2
3 3 NA 5 4 NA 3 3 3
4 4 5 6 1 NA 5 4 4
5 5 6 7 2 6 6 6 5
6 6 7 8 6 7 7 7 6
7 7 8 9 7 8 8 NA NA
8 8 9 10 8 9 9 NA NA
数据框是 8x8(8 列和 8 行),因此总共有 36 个观察点。
我需要通过计算每个 2x2 观察组的平均值将其缩小为 4x4 数据框。
2x2 NA 组应返回 NA 值,而如果在 2x2 组中存在 < 4 个 NA,则平均值必须排除它们,例如2,2,2,NA = 2 的平均值。
这里是我想要的输出:
newcol1 newcol2 newcol3 newcol4
2 3 2 1.50
4 4 4 3.50
6 5.75 6.50 6
8 8.50 8.50 NA
我认为我可以用 for 循环解决这个问题,这是我尝试但没有成功的方法:
a = 1
b = 2
for (i in 1:15) {
test[[i]] = mean(c(data[a,a], data[a,b], data[b,a], data[b,b]))
test[[i]] = mean(c(data[a+i,a+i], data[a+i,b+i], data[b+i,a+i], data[b+i,b+i]))
}
我在网上搜索了很多,但找不到任何类似的问题或解决方案。
有什么建议吗?
有没有可以做这种空间分析的R包?