P.E*_*ido 3 2d r spatial data-manipulation data.table
我有形式的二维空间数据(xBin,yBin,value).例如:
DT = data.table(x=c(rep(1,3),rep(2,3),rep(3,3)),y=rep(c(1,2,3),3),value=100*c(1:9))
Run Code Online (Sandbox Code Playgroud)
对于每个bin,我想计算所有相邻bin上的变量"value"的总和.如果bin的索引 - x和y都在距当前bin的一个单位内,则bin被认为是邻居
例如,对于x = 2,y = 2,我想计算
valueNeighbors(x=2,y=2) = value(x=1,y=1)+value(1,2)+value(1,3)
+value(2,1)+value(2,3)
+value(3,1)+value(3,2)+value(3,3)
Run Code Online (Sandbox Code Playgroud)
我的真实数据有~1,000 ^ 2个箱子,我怎样才能有效地做到这一点?
也许用光栅
X <- matrix(1:20, 4)
r <- raster(X)
r
agg <- as.matrix(focal(r,matrix(1,3,3),sum, pad = T, padValue = 0))
agg
[,1] [,2] [,3] [,4] [,5]
[1,] 14 33 57 81 62
[2,] 24 54 90 126 96
[3,] 30 63 99 135 102
[4,] 22 45 69 93 70
Run Code Online (Sandbox Code Playgroud)
对于大型数据集,哪种方法更快?
X <- matrix(1:1000000, 1000)
S <- matrix(NA, nrow(X), ncol(X))
r <- raster(X)
system.time(
as.matrix(focal(r,matrix(1,3,3),sum, pad = T, padValue = 0))
)
user system elapsed
0.39 0.08 0.47
Run Code Online (Sandbox Code Playgroud)
使用1000x1000矩阵,我无法使用Winsemius(Win 7 x64 8GB RAM)提出的解决方案在可重复的时间内获得结果
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |