2017-03-08 90 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)