2013-10-10 32 views
1

我有一個包含52個數字(有些是相同數字)的數據集,從這個數據集中我需要2000個樣本大小爲5的數據集。我如何在R控制檯中使用樣本和循環功能來做到這一點?R中的簡單樣本循環

+3

看看'sample'和'replicate'。 –

+0

5的樣本是否必須是唯一的,還是全部是用替換樣本? – John

回答

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 
3

請記住,如果你有放回抽樣(沒有指定),大小5的2000個樣品是沒有什麼不同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) 
0

不需要循環,如果可以的話,避免循環。 可以使用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)