Несколько случайных выборок в R

В настоящее время у меня есть фрейм данных, называемый ликвидацией, в котором я хочу выполнить 30 случайных выборок по 1000 наблюдений в каждой из них, указать, какая учетная запись получена из какой выборки, а затем объединить ее в новый фрейм данных со всеми 30 объединенными выборками:

Вот как я сделал это вручную при использовании пакета 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")

Мы используем базовую функцию replicate() повторить выборку несколько раз. Тогда мы используем dplyr"s bind_rows() объединить образцы и отслеживать, из какого образца они взяты.

Вы должны просто иметь возможность обернуть это в функцию (предполагая, что 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)

Вы можете попробовать использовать

      sampling <- liquidation %>%
  rep_sample_n(size = 1000, reps = 30, Replace = TRUE)

Ссылка: https://www.coursera.org/learn/inferential-statistics-intro/supplement/98MG1/lesson-learning-objectives .

Другие вопросы по тегам