如何计算R中3D阵列的占用比例?

时间:2016-11-01 10:55:29

标签: arrays r

我在网上有一些鱼的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;是占据细胞的比例。

0 个答案:

没有答案