取消嵌套时如何保留列名?

How can I retain column names when unnesting?

我正在根据嵌套数据框计算汇总统计信息,并且在未嵌套的列中添加统计信息。这是一个玩具示例:

library(purrr)
library(dplyr)
library(tidyr)

df <- tribble(
  ~data,
  tibble(pop = c(1, 2, 3)), 
  tibble(pop = c(4, 5, 6))
)

df2 <- df %>% mutate(median_pop = map(.x = data, ~ .x %>%
                                  summarise(median(pop)))) %>%
  unnest(median_pop)  %>% 
  rename(median_pop = `median(pop)`)

这会产生所需的结果,但它需要最后一行中的 rename 函数调用来重新生成在 mutate 函数调用中创建的 median_pop 列名称。我很清楚 unnest 以某种方式消除了 median_pop 列名称,但我不清楚为什么会这样或如何防止它。 unnest 的 names_repair 或 names_sep 参数似乎有可能解决问题,但我不明白如何解决。取消嵌套时是否可以保留列名?

命名实际上取决于map中的summarise调用而不是外部的mutate调用。 mutate 调用可以使用任何名称。

library(dplyr)
library(tidyr)
library(purrr)

df %>% 
  mutate(name_anything = map(.x = data, ~ .x %>% summarise(median_pop = median(pop)))) %>%
  unnest(name_anything)

#  data             median_pop
#  <list>                <dbl>
#1 <tibble [3 × 1]>          2
#2 <tibble [3 × 1]>          5