用于 3D 坐标分箱的算法(用 R 或任何其他语言)

algorithm for binning of 3D coordinates (in R or any other language)

我正在尝试对 3D 坐标进行分箱。

我有一个分子在蛋白质中移动的坐标,来自 800 多次模拟...我想要的是对这些数据进行分箱以获得均值、方差以及我在分箱中有多少点。

我想象是这样的: 包含我的 3D 坐标的 space 被分成由 breaks() 定义的更小的 3D 立方体(3D 箱)。

我需要的是这些较小的 3D 容器中的所有 x、y、z 坐标,以计算这些数据的均值和方差。

这有意义吗?

非常感谢任何帮助。

我的输入是这样的:

x<-c(1.1,1.2,4.3)
y<-c(3.4,5,2,3.2)
z<-c(10.1,10.3,12)
dat <- data.frame(x=x,y=y,z=z)

并且输出应按 bins 组织,其中 dat 具有关于坐标属于哪个 bin 的附加信息:

x y y bin_x bin_y bin_z

给你。我在这里可能完全错了,但如果没有一些预期的输出,你的问题很难回答。我继续你计算每个小立方体的均值和方差的意图,所以创建了一个分组变量。

#generate some data with some more points and a vale

set.seed(32587)

n=500
dat <- data.frame(x=runif(n,min=0,max=10),
                  y=runif(n,min=0,max=10),
                  z=runif(n,min=0,max=10))


#create bins (using 'cut', no need to do this manually or in a loop)
#I have removed the labels, so each bin is just a number.

#breaks have been changed to allow for actual binning 

breaks<-seq(0,10,1)

dat$bin_x <- cut(dat$x, breaks=breaks, labels=F)
dat$bin_y <- cut(dat$y, breaks=breaks, labels=F)
dat$bin_z <- cut(dat$z, breaks=breaks, labels=F)

#create grouping variable with some string formatting for readability
dat$bin_all <- with(dat, sprintf("%02d.%02d.%02d",bin_x,bin_y,bin_z))

head(dat)


library(data.table)

m_dat <- melt(setDT(dat),measure.vars=c("x","y","z"))


res <- m_dat[,.(mean_value=mean(value),variance_value=var(value),
                n_value=.N),by=list(bin_all,variable)]
res
#Matrix of bins
 mat <- cbind(rep(1:10, each = 100), rep(rep(1:10, each = 10), 10), rep(1:10, 100))
Data Frame of coordinates
df1 <- data.frame(x = c(1,3), y = c(2,6), z = c(8,10))

输出匹配df1行的3个值的mat行

apply(apply(df1, 1, function(x) 
apply(mat,1, function(y) 
sum(x[1] == y[1], x[2] == y[2], x[3] == y[3])) ), 2, 
function(z) which(z ==3))