【发布时间】:2019-11-19 07:05:43
【问题描述】:
假设我有以下(简化的)tibble,其中包含一个组和向量中的值:
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
我想通过求和(矢量化)来总结每组的值向量并尝试以下方法:
tb_vec %>% group_by(group) %>%
summarize(vec_sum = colSums(purrr::reduce(values, rbind)))
错误:列
vec_sum的长度必须为 1(汇总值),而不是 3
这个错误让我很吃惊,因为小标题(输出格式)也可以包含向量。
我的预期输出将是以下总结的小标题:
# A tibble: 2 x 2
group vec_sum
<fct> <list>
1 A <dbl [3]>
2 B <dbl [3]>
是否有一个 tidyverse 解决方案可以容纳 summarise 的向量输出?我想避免分裂小标题,因为那样我就会失去这个因素。
【问题讨论】:
-
试试
colSums(do.call(rbind, tb_vec$values))。 -
这对你有用吗?
tb_vec %>% group_by(group) %>% tidyr::unnest(values) %>% summarize(vec_sum = colSums(purrr::reduce(values, rbind))) -
我想你只需要使用
... %>% summarize(vec_sum = list(colSums(purrr::reduce(values, rbind)))) -
预期输出是什么?这提供了与@NelsonGon 相同的输出,但主要使用
unlist()。tb_vec%>%group_by(group)%>%summarize(vec_sum = sum(unlist(values))) -
@AntoniosK。就是这样,谢谢!如果你把它写成答案,我会接受它。
标签: r vector dplyr purrr summarize