在这个SO问题中,通过使用
broom::bootstrap
函数并将by_group
参数设置为TRUE
,多组和子组的引导似乎很容易实现。我想要的输出是一个嵌套的表格,其中包含n行数据列,每个引导调用生成的引导数据都包含在其中(每个组和子组具有与原始数据相同数量的情况)。
在中,我执行了以下操作:
# packages
library(dplyr)
library(purrr)
library(tidyr)
library(tibble)
library(rsample)
library(broom)
# some data to bootstrap
set.seed(123)
data <- tibble(
group=rep(c('group1','group2','group3','group4'), 25),
subgroup=rep(c('subgroup1','subgroup2','subgroup3','subgroup4'), 25),
v1=rnorm(100),
v2=rnorm(100)
)
# the actual approach using broom::bootstrap
tibble(id = 1:100) %>%
mutate(data = map(id, ~ {data %>%
group_by(group,subgroup) %>%
broom::bootstrap(100, by_group=TRUE)}))
由于 broom::bootstrap
函数已经被弃用,我重新使用 rsample::bootstraps
方法来获得需要的输出。似乎更加复杂才能得到所需的输出。是我的做法有问题还是在生成分组引导时 tidyverse 变得更加复杂了?
data %>%
dplyr::mutate(group2 = group,
subgroup2 = subgroup) %>%
tidyr::nest(-group2, -subgroup2) %>%
dplyr::mutate(boot = map(data, ~ rsample::bootstraps(., 100))) %>%
pull(boot) %>%
purrr::map(., "splits") %>%
transpose %>%
purrr::map(., ~ purrr::map_dfr(., rsample::analysis)) %>%
tibble(id = 1:length(.), data = .)
unite
和strata
参数的想法很好。然而,在你目前的方法中,每个引导迭代都包含相同的数据。如果你将结果分配给res
,然后尝试res$data[[1]]
和res$data[[2]]
。它们是相同的数据。在我的方法中,每次迭代是独特的。 - TimTeaFan