我使用以下代码获取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
答案 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