2017-03-08 1 views
2

J'ai actuellement un cadre de données appelé liquidation où je veux exécuter 30 échantillons aléatoires de 1000 observations chacun, désigner quel compte provient de quel échantillon et ensuite le combiner dans un nouveau cadre de données avec tous 30 échantillons combinés:Échantillonnage aléatoire multiple dans R

Voici comment je l'ai fait manuellement en utilisant le package dplyr pour l'échantillonnage aléatoire mais qui veulent simplifier la répétabilité:

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 

Puis-je combiner tout cela dans une trame de données combiné unique:

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: 

Répondre

3

Voici un exemple en utilisant mtcars (sélectionner 5 lignes au hasard, 10 fois)

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

Nous utilisons les functi de base sur replicate() pour répéter l'échantillonnage plusieurs fois. Ensuite, nous utilisons bind_rows() pour fusionner les échantillons et garder la trace de l'échantillon d'où ils viennent.

1

Vous devez simplement être en mesure d'envelopper cette place dans une fonction (en supposant Sample_20, etc sont temporaires et vous ne les avez pas besoin plus tard)

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

peut alors être exécuté avec:

combined <- sampling(liquidation)