我有一个包含 52 个数字的数据集(有些是相同的数字),我需要从这个数据集中获取 2000 个大小为 5 的样本。如何使用示例和循环函数在 R 控制台中执行此操作?
问问题
131 次
3 回答
3
请记住,如果您使用替换抽样(您没有指定)2000 个大小为 5 的样本与分成 5 个一组的 10,000 个样本没有什么不同。
Y <- sample(x, 10000, replace = TRUE)
您可以将其划分为多种方式,您可以制作data.frame
长格式或matrix
宽格式。
# long format
dat <- data.frame(id = rep(1:5, 2000), Y)
# wide format
dat <- matrix(Y, nrow = 5)
于 2013-10-10T17:30:47.227 回答
3
sample
在这里replicate
可能是一个有用的组合。
> # generating a data set consisting of 52 numbers
> set.seed(1)
> numbers <- sample(1:30, 52, TRUE) # a vector of 52 numbers, your sample
>
> # 20 samples of size five (I chose 10 intead of 2000 for this example)
> set.seed(2)
> results <- replicate(10, sample(numbers, 5))
> results
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 2 21 27 16 25 12 8 15 26 20
[2,] 21 29 21 21 24 20 19 17 15 21
[3,] 27 20 22 6 20 30 25 24 27 30
[4,] 19 20 19 7 20 15 24 26 20 9
[5,] 24 1 24 28 22 29 9 20 24 22
每个样本按列存储在称为 的矩阵中results
。以下代码将为您提供您正在寻找的答案。请注意,有两种选择,设置replace=TRUE
或是replace=FALSE
允许带替换或不带替换的采样。
results1 <- replicate(2000, sample(numbers, 5, replace=TRUE)) # sampling with replacement
results2 <- replicate(2000, sample(numbers, 5, replace=FALSE)) # sampling without replacement
于 2013-10-10T16:56:06.370 回答
0
这里不需要循环,如果可以的话,避免 R 中的循环。您可以使用该replicate
函数:这将返回一个矩阵,以便每个“复制”都是一列(默认情况下):
# x = your data here
n.samples = 2000
sample.size = 5
do.replace = FALSE
sample.matrix = replicate(n.samples, sample(x, sample.size, replace = do.replace))
print(sample.matrix)
于 2013-10-10T18:18:24.203 回答