我将X的值分成5个方框并计算其联合概率。
在下面的例子中,由于X中有很多2,所以最后我只有4个盒子。
示例:
X <-c(1,2,2,2,2,3,4,5,6,7)
Y <-c(0,1,1,1,0,1,0,1,0,1)
qX=quantile(X, 1:4/5) # find quantiles 20%,40%,60%,80%
qY=c(0,1)
dX=findInterval(X,qX,rightmost.closed=TRUE)
dY=findInterval(Y,qY+0.001,rightmost.closed=TRUE)
pXY=xtabs(~dX+dY)/10 # joint distribution
rownames(pXY) <- paste("box",1:dim(pXY)[1],sep="")
> pXY
dY
dX 0 1
box1 0.1 0.0
box2 0.1 0.4
box3 0.1 0.1
box4 0.1 0.1
现在我想在每个框中为X的范围添加一列。 所需的表格将是:
box1 [1,1] 0.1 0.0
box2 [2,3] 0.1 0.4
box3 [4,5] 0.1 0.1
box4 [6,7] 0.1 0.1
答案 0 :(得分:1)
添加xtabs
或table
的输出有些混乱。我会转换为matrix
:
pXY2 <- pXY; class(pXY2) <- "matrix"
data.frame(r=t(sapply(split(X,dX),range)),pXY2)
# r.1 r.2 X0 X1
# 0 1 1 0.1 0.0
# 2 2 3 0.1 0.4
# 3 4 5 0.1 0.1
# 4 6 7 0.1 0.1
鉴于用于制作dX
的分界点,方框的值确实为0,2,3,4,而不是1,2,3,4。
如果要使用特殊格式打印范围,请考虑编写自定义函数:
brackem <- function(x) paste0("[",x[1],",",x[2],"]")
data.frame(r=tapply(X,dX,function(z)brackem(range(z))),pXY2)
# r X0 X1
# 0 [1,1] 0.1 0.0
# 2 [2,3] 0.1 0.4
# 3 [4,5] 0.1 0.1
# 4 [6,7] 0.1 0.1