2017-03-08 88 views
2

我目前有一个数据框叫做清算,我想运行30个随机样本,每个样本1000个观察值,指定哪个帐户来自哪个样本,然后将它与所有30个样本组合成一个新的数据框样品组合:R中的多个随机采样

这是我如何手动做到了在使用dplyr包进行随机抽样,但希望简化它可重复性:

Sample_1 <- liquidation %>% 
    sample_n(1000) 
Sample_1$Obs <- 1 

Sample_2 <- liquidation %>% 
    sample_n(1000) 
Sample_2$Obs <- 2 

Sample_3 <- liquidation %>% 
    sample_n(1000) 
Sample_3$Obs <- 3 
.... 
Sample_30 <- liquidation %>% 
    sample_n(1000) 
Sample_30$Obs <- 30 

然后我结合所有到一个组合的数据帧:

Combined <- rbind(Sample_1, Sample_2, Sample_3, Sample_4, Sample_5, Sample_6, Sample_7, Sample_8, Sample_9, Sample_10, 
        Sample_11, Sample_12, Sample_13, Sample_14, Sample_15, Sample_16, Sample_17, Sample_18, Sample_19, 
        Sample_20, Sample_21, Sample_22, Sample_23, Sample_24, Sample_25, Sample_26, Sample_27, Sample_28, 
        Sample_29, Sample_30) 

str(Combined) 
'data.frame': 30000 obs. of 31 variables: 

回答

3

下面是使用mtcars一个例子(随机选择5行,10次)

Combined <- bind_rows(replicate(10, mtcars %>% sample_n(5), simplify=F), .id="Obs") 

我们使用碱functi在replicate()上多次重复采样。然后我们使用dplyrbind_rows()来合并样本并跟踪它们来自哪个样本。

1

你应该只能够来包装这个成一个功能(SAMPLE_20假设等都是暂时的,你不需要他们以后)

sampling <- function(x, nSamples = 30, nRows = 1000) { 
    do.call('rbind', lapply(seq_along(1:nSamples), function(n) { 
    x %>% sample_n(nRows) %>% mutate(Obs=n) 
    })) 
} 

然后可以运行:

combined <- sampling(liquidation)