R:找到X的范围

时间:2015-06-03 17:01:50

标签: r

我将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

1 个答案:

答案 0 :(得分:1)

添加xtabstable的输出有些混乱。我会转换为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