我在网上有一些鱼的x,y,z坐标的大型数据文件。我已经计算了x,y平面上覆盖的笔的比例,并在stackoverflow上得到了一些人的帮助:
prop.coverage <- function(xmin7 = 8, xmax7 = 33, ymin7 = 11.5, ymax7 = 36.5, xmin8 = 35, xmax8 = 60, ymin8 = 11.5, ymax8 = 36.5, boxsize = 0.3) {
fish.id <- subset(dayfile, PEN == '7')
x.grid <- floor((fish.id$PosX - xmin7) / boxsize) + 1
y.grid <- floor((fish.id$PosY - ymin7) / boxsize) + 1
x.grid.max <- floor((xmax7 - xmin7) / boxsize) + 1
y.grid.max <- floor((ymax7 - ymin7) / boxsize) + 1
t.x <- sort(unique(x.grid))
t.y <- sort(unique(y.grid))
tx.range <- c(min(which(t.x > 0)), max(which(t.x <= x.grid.max)))
ty.range <- c(min(which(t.y > 0)), max(which(t.y <= y.grid.max)))
t.xy <- table(y.grid, x.grid)[ty.range[1]:ty.range[2],tx.range[1]:tx.range[2]]
grid.cov.xy <- matrix(0,nrow=y.grid.max,ncol=x.grid.max)
t.x <- t.x[(t.x > 0) & (t.x <=x.grid.max)]
t.y <- t.y[(t.y > 0) & (t.y <=y.grid.max)]
eg.xy <- expand.grid(t.y,t.x)
grid.cov.xy[cbind(eg.xy$Var1,eg.xy$Var2)] <- as.vector(t.xy)
coverage.P7 <- matrix(c(length(which(grid.cov.xy > 0)), length(grid.cov.xy), length(which(grid.cov.xy > 0))/length(grid.cov.xy)), ncol = 3)
colnames(coverage.P7) <- c('occupied', 'total', 'proportion')
}
我现在想扩展这个以计算三维覆盖的笔的比例。我猜这将涉及使用3D阵列。我添加了一些代码来在y,z维度中创建第二个覆盖表。
z.grid <- floor((fish.id$PosZ - zmin7) / boxsize) + 1
z.grid.max <- floor((zmax7 - zmin7) / boxsize) + 1
t.z <- sort(unique(z.grid))
tz.range <- c(min(which(t.z > 0)), max(which(t.z <= z.grid.max)))
t.yz <- table(y.grid, z.grid)[ty.range[1]:ty.range[2],tz.range[1]:tz.range[2]]
grid.cov.yz <- matrix(0,nrow=y.grid.max,ncol=z.grid.max)
t.z <- t.z[(t.z > 0) & (t.z <= z.grid.max)]
eg.yz <- expand.grid(t.y,t.z)
grid.cov.yz[cbind(eg.yz$Var1,eg.yz$Var2)] <- as.vector(t.yz)
但是,我不确定如何将我的2D网格覆盖表映射到数组中。有没有人有什么建议?任何帮助将不胜感激。
修改的
这就是我的数据的样子(位置以米为单位):
Fish ID EchoTime PosX PosY PosZ
7017 16/06/2016 00:03:39 12.94 33.18 18.92
7017 16/06/2016 00:03:53 13.02 32.66 15.69
7017 16/06/2016 00:03:54 17.24 28.03 13.27
7017 16/06/2016 00:04:00 13.09 32.69 15.05
7017 16/06/2016 00:04:01 16.15 29.33 13.33
7017 16/06/2016 00:04:07 12.96 32.79 14.3
7017 16/06/2016 00:04:08 14.74 31.07 13.47
7017 16/06/2016 00:04:14 12.49 33.12 13.94
7017 16/06/2016 00:04:15 13.93 31.84 13.49
这是我想要的输出:
occupied total proportion
5648 122586 0.046
总计&#39;是一个3D网格中的单元格数量,覆盖的体积为25 * 25 * 25m,占用了#39;是鱼类占据的细胞数量和比例&#39;是占据细胞的比例。