嵌套分类变量,bootstrap,然后在 R 中提取中位数

nesting categorical variable, bootstrap, then extract median in R

我在使用看似简单的解决方案时遇到了问题。我有一个包含一些 locations 的数据框,每个位置都有一个与之关联的 value。我按位置嵌套了 data.frame,然后 bootstrap 使用 purrr 对值进行了调整(见下文)。

library(tidyverse)
library(modelr)
library(purrr)

locations <- c("grave","pinkham","lower pinkham", "meadow", "dodge", "young")

values <- rnorm(n = 100, mean = 3, sd = .5)
df <- data.frame(df)

df.boot <- df %>% 
  nest(-locations) %>% 
  mutate(boot = map(data,~bootstrap(.,n=100, id = "values")))

现在我试图从最终列表 df.boot$boot 中的每个 bootstrap 中获取中位数,但似乎无法弄清楚?我试过应用 map(boot, median) 但我越深入挖掘就越觉得没有意义。 boot 列表中想要的向量是 idx,我可以从中获取中值然后存储它(几乎与 boot 函数的作用相同,但通过唯一的分类变量进行迭代)。任何帮助将非常感激。我可能只是走错了路...

如果我们需要提取median

library(dplyr)
library(purrr)
library(modelr)
out <- df %>%
         group_by(locations) %>% 
         nest %>% 
         mutate(boot = map(data, ~ bootstrap(.x, n = 100, id = 'values') %>%
                                 pull('strap') %>% 
                                 map_dbl(~ as_tibble(.x) %>% 
                                          pull('values') %>%
                                          median)))
out
# A tibble: 6 x 3
# Groups:   locations [6]
#  locations     data              boot       
#  <fct>         <list>            <list>     
#1 pinkham       <tibble [12 × 1]> <dbl [100]>
#2 lower pinkham <tibble [17 × 1]> <dbl [100]>
#3 meadow        <tibble [16 × 1]> <dbl [100]>
#4 dodge         <tibble [22 × 1]> <dbl [100]>
#5 grave         <tibble [21 × 1]> <dbl [100]>
#6 young         <tibble [12 × 1]> <dbl [100]>

数据

df <- data.frame(values, locations = sample(locations, 100, replace = TRUE))