Как отменить tibble после group_nest?

#r #dplyr

#r #dplyr

Вопрос:

Вот код, который собирает некоторые данные по некоторым столбцам группировки:

 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 имеет столбец grouping_ фреймов данных с двумя элементами (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 работать:

 > 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.

РЕДАКТИРОВАТЬ: вот хакерский способ:

 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