2015-10-04 49 views
0

我正在嘗試在R中使用引導來重新採樣一組二進制選項。我能獲得的10個樣本「是」或「否」從50如何使用for循環來生成R中的對象

n <- 50 
x <- (c(rep("YES", 25), rep("NO", 25))) 
sample.1 <- sample(x,10) 
(sample.1) 
[1] "YES" "NO" "NO" "NO" "NO" "NO" "NO" "NO" "NO" "YES" 

人口答案然而,我需要重複此約1000倍(或次任意x個),每個存儲它自己的對象(sample.1將有10個答案,sample.2將有10個答案等等) 每個需要分開的原因是這樣每個人都可以從「是」的比例生成自己的置信區間,答案和置信區間的跨度將被繪製成直方圖。 for循環可以實現嗎?如果是這樣,怎麼樣?

+2

請參閱'?replicate'。另請參閱'?apply'來說明如何處理'replicate'的輸出。 – MichaelChirico

+0

我確定有一個更優雅的方法可以做到這一點,但如果你打電話給yeses和nos矢量而不是'x',那麼這會得到一個包含1000個樣本的清單:'samples < - lapply(rep(10,times = 1000),function(x)sample(vector,x))''。然後,您可以在該列表上再次使用'lapply'來獲得您的摘要統計信息,如果您希望結果是矢量,則可以使用'sapply'。 – ulfelder

+2

您正在抽樣而不更換。那真的是你想要的嗎?如何返回矩陣樣本。< - matrix(sample(c(「YES」,「NO」),1000,replace = TRUE,prob = c(.5,.5)),nrow = 10)所以你可以做簡單的事情,比如'apply(sample.1 ==「YES」,2,sum)' – ekstroem

回答

0
library(dplyr) 

data_frame(x = (c(rep("YES", 25), rep("NO", 25))) %>% 
    merge(data_frame(i = 1:1000)) %>% 
    group_by(i) %>% 
    sample_n(10, replace = TRUE) 

在R中,沒有索引的合併需要交叉連接。這將複製您的數據,然後以不同的方式重新採樣每個複製品。也許效率不高。