【问题标题】:How can I retain column names when unnesting?取消嵌套时如何保留列名?
【发布时间】:2021-04-20 04:45:12
【问题描述】:

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

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 参数似乎可以解决问题,但我不明白如何解决。取消嵌套时是否可以保留列名?

【问题讨论】:

    标签: r dplyr purrr


    【解决方案1】:

    命名实际上取决于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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2020-10-31
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 2012-08-05
      相关资源
      最近更新 更多