R中的简单采样循环

时间:2013-10-10 16:49:32

标签: r

我有一个52个数字的数据集(有些是相同的数字),我需要从这个数据集中获取2000个大小为5的样本。如何使用样本和循环函数在R控制台中执行此操作?

3 个答案:

答案 0 :(得分:3)

samplereplicate可能是一个有用的组合。

> # 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=TRUEreplace=FALSE是为了允许替换或不替换。

results1 <- replicate(2000, sample(numbers, 5, replace=TRUE)) # sampling with replacement
results2 <- replicate(2000, sample(numbers, 5, replace=FALSE))  # sampling without replacement

答案 1 :(得分:3)

请记住,如果您使用替换品进行抽样(未指定),则2000个样本5的大小与10,000个样本分为5个小组没有区别。

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)

答案 2 :(得分:0)

这里不需要循环,如果可以,请避免R中的循环。 您可以使用replicate函数:这会返回一个矩阵,以便每个'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)