汇总到矢量输出

Mar*_*kum 5 r vector dplyr purrr summarize

假设我有以下(简化的)小标题,其中包含向量中的组和值:

set.seed(1)
(tb_vec <- tibble(group = factor(rep(c("A","B"), c(2,3))),
             values = replicate(5, sample(3), simplify = FALSE)))
# A tibble: 5 x 2
  group values   
  <fct> <list>   
1 A     <int [3]>
2 A     <int [3]>
3 B     <int [3]>
4 B     <int [3]>
5 B     <int [3]>

tb_vec[[1,2]]
[1] 1 3 2
Run Code Online (Sandbox Code Playgroud)

我想通过将它们汇总(向量化)来总结每组的值向量,并尝试以下方法:

tb_vec %>% group_by(group) %>% 
  summarize(vec_sum = colSums(purrr::reduce(values, rbind)))
Run Code Online (Sandbox Code Playgroud)

错误:列的vec_sum长度必须为1(汇总值),而不是3

该错误使我感到惊讶,因为小标题(输出格式)也可以包含矢量。

我的预期输出将是以下摘要信息:

# A tibble: 2 x 2
  group vec_sum  
  <fct> <list>   
1 A     <dbl [3]>
2 B     <dbl [3]>
Run Code Online (Sandbox Code Playgroud)

是否有一个tidyverse解决方案可容纳Summary的向量输出?我要避免分裂小标题,因为这样我就放宽了这个因素。

Ant*_*osK 3

您只需要在解决方案中添加list(.)inside summarise,以便能够拥有一个包含 2 个元素的列,其中每个元素是一个包含 3 个值的向量:

library(tidyverse)

set.seed(1)
(tb_vec <- tibble(group = factor(rep(c("A","B"), c(2,3))),
                  values = replicate(5, sample(3), simplify = FALSE)))

tb_vec %>% 
  group_by(group) %>%                              
  summarize(vec_sum = list(colSums(purrr::reduce(values, rbind)))) -> res

res$vec_sum

# [[1]]
# [1] 2 4 6
# 
# [[2]]
# [1] 6 5 7
Run Code Online (Sandbox Code Playgroud)