数据框或分位数矩阵
data frame or matrix of quantiles
我使用以下代码获取 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
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(..)
包裹起来。这会将分位数的输出排列为列而不是行。
另一种选择是 rowQuantiles
从 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
或者我们获取 'x' 的 sample
与前面的情况一样指定长度,使用 rep
创建一个分组变量,然后按组使用标准聚合来获取quantile
。这里我们可以使用data.table
的方式。
library(data.table)
d1 <-data.table(V1=sample(x, 100*length(x), replace=TRUE),
V2=rep(1:100,each=length(x)))[,
as.list(quantile(V1, probs=c(0.25, 0.5, 0.75,0.99))), by = V2]
我使用以下代码获取 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
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(..)
包裹起来。这会将分位数的输出排列为列而不是行。
另一种选择是 rowQuantiles
从 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
或者我们获取 'x' 的 sample
与前面的情况一样指定长度,使用 rep
创建一个分组变量,然后按组使用标准聚合来获取quantile
。这里我们可以使用data.table
的方式。
library(data.table)
d1 <-data.table(V1=sample(x, 100*length(x), replace=TRUE),
V2=rep(1:100,each=length(x)))[,
as.list(quantile(V1, probs=c(0.25, 0.5, 0.75,0.99))), by = V2]