如何在 group_nest 之后取消嵌套 tibble?

Posted

技术标签:

【中文标题】如何在 group_nest 之后取消嵌套 tibble?【英文标题】:How to unnest tibble after group_nest? 【发布时间】:2020-11-12 21:38:43 【问题描述】:

这是通过一些分组列收集一些数据的代码:

df <- tibble(data.frame(x=c(1,2,3), y=c(4,5,6)))
vars <- c('x', 'y')
df2 <- df %>%
    group_nest(grouping_=across(all_of(vars))) %>%
    mutate(result=1, data=NULL) %>%
    unnest(cols=result)

现在 df2 有一个包含两个元素(x 和 y)的数据帧分组列:

> str(df2)
tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
 $ grouping_: tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
  ..$ x: num [1:3] 1 2 3
  ..$ y: num [1:3] 4 5 6
 $ result   : num [1:3] 1 1 1

如何将 df2 展平为具有三列(x、y、结果)的数据框?

我无法放松地工作:

> unnest(df2, cols=grouping_)
Error: Assigned data `map(data[[col]], as_df, col = col)` must be compatible with existing data.
x Existing data has 3 rows.
x Assigned data has 2 rows.
ℹ Only vectors of size 1 are recycled.

我使用的是 tidyverse 1.3.0,因此是 dplyr 1.0.0。

编辑:这是一个 hacky 方法:

cbind(df2$grouping_,
      df2 %>% mutate(grouping_=NULL))

也许这是最好的方法。

【问题讨论】:

【参考方案1】:

尝试使用summarize() 而不是unnest()

df2 <- df %>%
  group_nest(grouping_=across(all_of(vars))) %>%
  mutate(result=1, data=NULL) %>% 
  summarize(grouping_, result)

df2 
# A tibble: 3 x 3
      x     y result
  <dbl> <dbl>  <dbl>
1     1     4      1
2     2     5      1
3     3     6      1

str(df2)
tibble [3 x 3] (S3: tbl_df/tbl/data.frame)
 $ x     : num [1:3] 1 2 3
 $ y     : num [1:3] 4 5 6
 $ result: num [1:3] 1 1 1

【讨论】:

以上是关于如何在 group_nest 之后取消嵌套 tibble?的主要内容,如果未能解决你的问题,请参考以下文章

如何在查询中取消嵌套嵌套表的集合?

如何在 BigQuery 标准 SQL 中取消嵌套多个数组

如何在 mongoDB 中取消嵌套和分组集合

如何在 Pandas 中将日期列和相关列一起取消嵌套?

如何在 BigQuery 中取消嵌套多个数组?

如何在java中跟踪和实现嵌套Runnable的取消选项