В этом вопросе SO начальной загрузке несколькими группами и подгруппами, казалось, было легко использовать функцию broom::bootstrap
, указав аргумент by_group
с TRUE
.
Мой желаемый выводвложенный столбец с n строками, где столбец данных содержит загруженные данные, генерируемые каждым вызовом начальной загрузки (и каждая группа и подгруппа имеют такое же количество наблюдений, что и в исходных данных).
В broom
я сделалследующее:
# 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(10, by_group=TRUE)}))
Поскольку функция broom::bootstrap
устарела, я перестроил свой подход с желаемым выводом, используя rsample::bootstraps
. Кажется, гораздо сложнее получить желаемый результат. Я делаю что-то не так или все становится сложнее при создании сгруппированных бутстрапов?
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 = .)