Несколько случайных выборок в 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)