добавить группирующую переменную для вложенных столбцов - PullRequest
1 голос
/ 16 октября 2019

Это продолжение этого вопроса .

Мне нужно иметь возможность столбцов group_by () в моей новой вложенной таблице. Я не могу найти функцию purrr, которая делает это (хотя я знаю, что решение существует). Мне нужно, чтобы group_by в каждой таблице применял дополнительные функции суммирования и соответствовал соответствующим линейным моделям. Пример, приведенный здесь, является просто фиктивным примером.

library(tidyverse)
set.seed(2)
N <- 30
df <- tibble(type = rep(c("small","medium","high"), each=N/3),
             dummy = rep(c(1,5,10),each=10),
             xvals = rep(1:10,3),
             A = rnorm(N)*dummy,
             B = rnorm(N)*dummy,
             C = rnorm(N)*dummy) %>%
  mutate(type = factor(type, levels=c("small","medium","high"))) %>%
  select(-dummy) %>%
  pivot_longer(cols=-c(type,xvals), names_to="metric", values_to = "value") %>%
  group_by(type) %>%
  group_nest(.key="data")

Это создает столбец с двумя столбцами:

df
# A tibble: 3 x 2
  type   data             
  <fct>  <list>           
1 small  <tibble [30 x 3]>
2 medium <tibble [30 x 3]>
3 high   <tibble [30 x 3]>

Это пример того, что я хочу сделать для всех вложенных элементов. :

df[[2]][[1]] %>% 
  group_by(metric) %>%
  summarize(mean = mean(value))

# A tibble: 3 x 2
  metric   mean
  <chr>   <dbl>
1 A       0.211
2 B      -0.296
3 C      -0.391

1 Ответ

1 голос
/ 16 октября 2019

После group_nest 'data' - это столбец list с tibble s, и есть только два столбца 'type' и 'data'. Если нам нужно создать группировку на основе столбца list, переберите list с помощью map, а затем выполните group_by

library(dplyr)
library(tidyr)
library(purrr)

df %>%
    mutate(data  = map(data, ~ .x %>%
                                   group_by(metric)  %>%
              summarize(mean = mean(value)))) -> out

out$data[[1]]
# A tibble: 3 x 2
#  metric   mean
#  <chr>   <dbl>
#1 A       0.115
#2 B       0.323
#3 C      -0.326

ПРИМЕЧАНИЕ. Выходные значения будут другими, посколькуне было set семян

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...