如果您想要实际高度而不是每个分配给的箱,这是一种选择
## dummy data
DF <- data.frame(DB_num = rnorm(10000), AD_num = rnorm(10000))
require("MASS")
kde <- kde2d(DF[,1], DF[,2], n = 50)
请注意kde2d
作为组件的返回,z
它是一个具有(在这种情况下)50 行和列的矩阵,其中行对应于x
数据,列对应于y
数据。由于矩阵只是一个向量,并且数据按列填充,我们可以利用这一点并将x
和y
值n
每次堆叠(n = 50
此处),然后展开kde$z
dd <- dim(kde$z)
res <- data.frame(DB_num = rep(kde$x, times = dd[1]),
AD_num = rep(kde$y, times = dd[2]),
height = as.numeric(kde$z))
这产生
> head(res)
DB_num AD_num height
1 -3.582508378 -3.79074271 0.0000000000000000000000000006907447484
2 -3.429230262 -3.63682706 0.0000000000000000000000002951259863229
3 -3.275952146 -3.48291141 0.0000000000000000000000558203373144190
4 -3.122674029 -3.32899576 0.0000000000000000000055565720524140235
5 -2.969395913 -3.17508011 0.0000000000000000014967010810961022503
6 -2.816117797 -3.02116446 0.0000000000000008159370528768207499471
要获得垃圾箱,您需要遵循所做的filled.contour
事情,即通过
nlevels <- 20 ## default
brks <- pretty(range(res$height), nlevels)
> brks
[1] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14
[16] 0.15 0.16
然后使用cut
将每个分配height
到一个 bin 的基础上brks
,例如
res <- transform(res, bin = as.numeric(cut(height, brks)))
这使
> head(res)
DB_num AD_num height bin
1 -3.582508378 -3.79074271 0.0000000000000000000000000006907447484 1
2 -3.429230262 -3.63682706 0.0000000000000000000000002951259863229 1
3 -3.275952146 -3.48291141 0.0000000000000000000000558203373144190 1
4 -3.122674029 -3.32899576 0.0000000000000000000055565720524140235 1
5 -2.969395913 -3.17508011 0.0000000000000000014967010810961022503 1
6 -2.816117797 -3.02116446 0.0000000000000008159370528768207499471 1
您可能需要检查详细信息?cut
以确定垃圾箱边界上的行为,但这应该让您足够接近。