R语言分组处理列表列时生成所有元素组合累加结果的实现问题
解决方案
核心思路
原来的accumulate累加逻辑仅对两个向量的对应位置元素拼接,你需要修改累加函数,每次生成前序累积结果与当前元素的全笛卡尔积后再拼接,即可得到所有组合。
完整修改代码
library(tidyverse) # 构造测试数据 test <- structure(list(items = list('a', c('b', 'c'), c('d', 'e'), 'f', c('g', 'h')), ID = c(1,1,1,2,2)), row.names = c(NA, 5L), class = "data.frame") res <- test %>% group_by(ID) %>% mutate( # dummy为列表列,存储所有组合的字符向量,用outer实现全组合拼接,写法简洁高效 dummy = accumulate(items, ~as.vector(outer(.x, .y, paste))), # 可选:生成便于打印的逗号分隔字符串列,和你给出的预期输出格式完全匹配 dummy_display = map_chr(dummy, ~paste(.x, collapse = ", ")) )
输出验证
查看生成的dummy_display列即可得到你需要的效果:
# A tibble: 5 × 4 # Groups: ID [2] items ID dummy dummy_display <list> <dbl> <list> <chr> 1 <chr [1]> 1 <chr [1]> a 2 <chr [2]> 1 <chr [2]> a b, a c 3 <chr [2]> 1 <chr [4]> a b d, a b e, a c d, a c e 4 <chr [1]> 2 <chr [1]> f 5 <chr [2]> 2 <chr [2]> f g, f h
内容的提问来源于stack exchange,提问作者AnilGoyal
相关产品推荐
相关产品推荐

