嵌套tibble分组汇总追加列表列:按gear聚合对应唯一车型列表
问题原因
你原有代码的问题在于,map(models, c)是对每个gear分组下的models列(同一gear下包含多个列表元素)逐元素执行操作,并没有把同组的所有列表元素合并成一个整体向量。
正确解法
你可以用purrr::list_c(purrr 1.0.0及以上版本推荐)直接把同组的列表元素拼接,外层套list()保证返回结果是列表列:
library(tidyverse) my_df %>% group_by(gear) %>% summarise(models = list(list_c(models)))
如果你使用的是旧版本purrr,可以用reduce实现同样的拼接效果:
my_df %>% group_by(gear) %>% summarise(models = list(reduce(models, c)))
补充说明
运行上述代码得到的结果和你预期的输出完全匹配:gear=3的列表长度为15,gear=4为12,gear=5为5。如果你的业务场景中可能存在跨carb分组的重复车型,可以在拼接后加unique()去重:
my_df %>% group_by(gear) %>% summarise(models = list(unique(list_c(models))))
内容的提问来源于stack exchange,提问作者Jeff Parker
相关产品推荐
相关产品推荐

