【问题标题】:add grouping variable for nested tibbles为嵌套的小标题添加分组变量
【发布时间】:2020-02-13 11:40:45
【问题描述】:

这是question的后续行动。

我需要能够在我的新嵌套表中对列进行分组。我找不到执行此操作的 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

【问题讨论】:

  • group_nest之后只有两列typedata
  • 想要的输出到底是什么?您尝试创建的 tibble 是什么样的?您只能根据顶层的列对 tibble 进行分组。
  • @akrun 我根据您的 cmets 更新了帖子。现在应该更清楚我的意图了。
  • @LloydChristmas。你可以查看我的更新

标签: r dplyr tidyr purrr


【解决方案1】:

group_nest 之后,“数据”是tibbles 的list 列,只有“类型”和“数据”两列。如果我们需要基于list 列创建分组,请循环使用listmap,然后执行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 种子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2017-12-07
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    相关资源
    最近更新 更多