Как получить сгруппированную сумму с гнездом за один шаг - PullRequest
0 голосов
/ 04 августа 2020

Я не могу получить сгруппированную сумму за один шаг, используя гнездо, но за 2 шага. Как я могу использовать карту для столбца l oop над data в выводе nest(). Также предложите способ включить выходной столбец в существующий фрейм данных.

suppressWarnings(library(tidyverse))
tmp_df <- 
  data.frame(group = rep(c(2L, 1L), each = 5), b = rep(c(-1, 1), each = 5)) 

tmp_df1 = tmp_df %>% group_by(group) %>% nest() #step1
map(tmp_df1$data, sum)  #step 2
#> [[1]]
#> [1] -5
#> 
#> [[2]]
#> [1] 5

Я знаю, как получить сумму с помощью group_by.

suppressWarnings(library(tidyverse))
tmp_df <- 
  data.frame(group = rep(c(2L, 1L), each = 5), b = rep(c(-1, 1), each = 5)) 

tmp_df %>% 
  group_by(group) %>% 
  summarise(sum = sum(b))
#> `summarise()` ungrouping output (override with `.groups` argument)
#> # A tibble: 2 x 2
#>   group   sum
#>   <int> <dbl>
#> 1     1     5
#> 2     2    -5

Создано 2020-08 -04 пакетом REPEX (v0.3.0)

1 Ответ

1 голос
/ 04 августа 2020

Если вы хотите использовать nest, вы можете попробовать map_dbl:

library(tidyverse)

tmp_df %>% 
  group_by(group) %>% 
  nest() %>%
  mutate(sum = map_dbl(data, ~.x %>% sum))

#  group data               sum
#  <int> <list>           <dbl>
#1     2 <tibble [5 × 1]>    -5
#2     1 <tibble [5 × 1]>     5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...