R中的多重随机抽样
Multiple Random Sampling in R
我目前有一个名为 liquidation 的数据框,我想在其中 运行 从中抽取 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:
您应该能够将其包装成一个函数(假设 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)
下面是一个使用mtcars
的例子(随机选择5行,10次)
Combined <- bind_rows(replicate(10, mtcars %>% sample_n(5), simplify=F), .id="Obs")
我们使用基函数replicate()
多次重复采样。然后我们使用 dplyr
的 bind_rows()
合并样本并跟踪它们来自哪个样本。
我目前有一个名为 liquidation 的数据框,我想在其中 运行 从中抽取 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:
您应该能够将其包装成一个函数(假设 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)
下面是一个使用mtcars
的例子(随机选择5行,10次)
Combined <- bind_rows(replicate(10, mtcars %>% sample_n(5), simplify=F), .id="Obs")
我们使用基函数replicate()
多次重复采样。然后我们使用 dplyr
的 bind_rows()
合并样本并跟踪它们来自哪个样本。