数据帧或分位数矩阵

时间:2015-09-11 14:27:00

标签: r matrix quantile statistics-bootstrap

我使用以下代码获取x的分位数(25%,50%,75%和99%)并复制100次。

x<-c(1,2,3,5,4,5,6,7,8,5,4,3,2)
sample.boot=numeric()

for (i in 1:100){
       sample.boot[i]<-quantile(sample(x,replace = T),c(0.25,0.50,0.75,0.99))
}
sample.boot

这不是提供所需的输出。我想要将所有四个分位数复制100次并存储为数据帧或如下所示存储在矩阵中。

4 5 5 7
2 4 6 7
.......
.......
3 5 5 6

2 个答案:

答案 0 :(得分:3)

t(replicate(100, quantile(sample(x,replace = T),c(0.25,0.50,0.75,0.99))))
#        25% 50% 75%  99%
#   [1,]   3   4   5 7.64
#   [2,]   5   5   5 7.00
#   [3,]   2   5   5 7.88
#   [4,]   2   4   5 7.88
#   [5,]   4   5   7 7.88
#   [6,]   4   4   7 7.88
#   [7,]   3   4   5 7.00
#   [8,]   2   4   5 7.00
#   [9,]   4   5   5 7.76
#  [10,]   3   4   5 7.64

内部replicate使用sapply并以一种使这种重复操作有效的方式执行此操作。第一个参数接受一个整数值,表示第二个参数应重复的次数。

整个函数都包含t(..)。这将输出的分位数排列为列而不是行。

答案 1 :(得分:1)

另一个选项是来自rowQuantiles的{​​{1}} library(matrixStats)我们sample一次,长度等于length(x)*100并将vector转换为matrix尺寸100*length(x)

library(matrixStats)
m1 <- matrix(sample(x, 100*length(x), replace=TRUE), nrow=100, byrow=TRUE)
rowQuantiles(m1, probs=c(0.25,0.50,0.75,0.99))

检查我们是否获得与replicate

相同的输出
set.seed(24)
r1 <- t(replicate(100, quantile(sample(x,replace = T),c(0.25,0.50,0.75,0.99))))
set.seed(24)
m1 <- matrix(sample(x, 100*length(x), replace=TRUE), nrow=100, byrow=TRUE) 
r2 <- rowQuantiles(m1, probs=c(0.25,0.50,0.75,0.99))
identical(r1, r2)
#[1] TRUE

或者我们得到sample的'x',其长度如上例所示,使用rep创建分组变量,然后按组使用标准聚合来获取{{1} }。在这里,我们可以使用quantile方法。

data.table