【发布时间】:2026-01-19 09:30:01
【问题描述】:
问题
在包含 tibbles 的列上使用 tibble %>% group_by() %>% summarise(...=reduce(...)) 时,我希望输出保持为 tibbles 列。我怎样才能最有效地做到这一点?
小例子:
设置
vec1 = rnorm(10)
vec2 = rnorm(10)
vec3 = rnorm(10)
vec4 = rnorm(10)
tib=tibble(grpvar=factor(c('a','a','b','b')))
tib$col2=1
tib$col2[1]=tibble(vec1)
tib$col2[2]=tibble(vec2)
tib$col2[3]=tibble(vec3)
tib$col2[4]=tibble(vec4)
这就是它的样子:
grpvar col2
<fct> <list>
1 a <dbl [10]>
2 a <dbl [10]>
3 b <dbl [10]>
4 b <dbl [10]>
一个非常小的 tibble,其中包含将用于分组的变量,另一列包含包含长度为 10 的向量的 tibble。
问题
在summarise 中使用reduce 可以简化输出...
tib %>% group_by(grpvar) %>% summarise(aggr=reduce(col2,`+`))
产量:
grpvar aggr
<fct> <dbl>
1 a -0.0206
...
10 a -0.101
...
20 b 0.520
在这里,tibble 变得很长......我不希望每个组变量有 10 行,而是只需要一个包含 10 个值的 tibble。
期望的输出:
应该是这个样子
desired_outout<-tibble(grpvar=c('a','b'),aggr=NA)
desired_outout$aggr[1]=tibble(reduce(tib$col2[1:2],`+`))
desired_outout$aggr[2]=tibble(reduce(tib$col2[3:4],`+`))
看起来像:
# A tibble: 2 x 2
grpvar aggr
<chr> <list>
1 a <dbl [10]>
2 b <dbl [10]
即,它保留了 column-of-tibbles 结构(在内部,我相信它是一个向量列表)
【问题讨论】: