2015-10-04 189 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中,没有索引的合并需要交叉连接。这将复制您的数据,然后以不同的方式重新采样每个复制品。也许效率不高。