总结为向量输出
summarize to vector output
假设我有以下(简化的)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)))
Error: Column vec_sum
must be length 1 (a summary value), not 3
这个错误让我很吃惊,因为 tibbles(输出格式)也可以包含向量。
我的预期输出将是以下摘要摘要:
# A tibble: 2 x 2
group vec_sum
<fct> <list>
1 A <dbl [3]>
2 B <dbl [3]>
有没有适合summarize向量输出的tidyverse解决方案?我想避免分裂 tibble,因为这样我就失去了因素。
您只需要在解决方案的 summarise
内添加 list(.)
,以便能够拥有包含 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
假设我有以下(简化的)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)))
Error: Column
vec_sum
must be length 1 (a summary value), not 3
这个错误让我很吃惊,因为 tibbles(输出格式)也可以包含向量。
我的预期输出将是以下摘要摘要:
# A tibble: 2 x 2
group vec_sum
<fct> <list>
1 A <dbl [3]>
2 B <dbl [3]>
有没有适合summarize向量输出的tidyverse解决方案?我想避免分裂 tibble,因为这样我就失去了因素。
您只需要在解决方案的 summarise
内添加 list(.)
,以便能够拥有包含 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