#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