R中的多重随机抽样

rlcwz9us  于 2023-04-18  发布在  其他
关注(0)|答案(3)|浏览(136)

我目前有一个名为liquidation的 Dataframe ,我想运行30个随机样本,每个样本包含1000个观察结果,指定哪个账户来自哪个样本,然后将其合并为一个新的 Dataframe ,其中包含所有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

然后,我将它们全部组合到一个组合 Dataframe 中:

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:
ibrsph3r

ibrsph3r1#

下面是一个使用mtcars的示例(随机选择5行,共10次)

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

我们使用基函数replicate()多次重复采样,然后使用dplyrbind_rows()合并样本并跟踪它们来自哪个样本。

up9lanfz

up9lanfz2#

你应该能够将其 Package 成一个函数(假设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)
tcomlyy6

tcomlyy63#

你可以试试用

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

参考:https://www.coursera.org/learn/inferential-statistics-intro/supplement/98MG1/lesson-learning-objectives

相关问题