如何根据计数向量重复R语言列表元素?求实现方法
解决R语言列表元素按指定次数重复的问题
嗨,这个需求其实用R的基础工具或者tidyverse生态都能轻松实现,我给你两种实用的方案:
方案一:基础R原生方法(无需额外装包)
R内置的rep()函数对列表的处理刚好支持按元素指定重复次数的需求,直接传入你的列表和次数向量就行:
# 定义原始数据 example <- list(c(1, 5, 3, 6, 3), c(4, 2, 56, 2, 56, 2), c(4, 2, 6, 2, 6, 1, 34)) count <- c(5, 2, 1) # 按指定次数重复列表元素 result <- rep(example, times = count) # 验证结果长度 length(result) # 输出:8,和sum(count)的计算结果一致
原理很直白:当rep()的times参数传入一个与列表长度匹配的向量时,会按向量里的数值对应重复列表的每个元素——第一个元素重复5次,第二个重复2次,第三个仅重复1次,完全契合你的需求。
方案二:tidyverse风格方案(适合习惯purrr的用户)
如果你平时常用tidyverse生态的工具,可以用purrr包的map2()函数配合flatten()来实现:
# 先安装并加载purrr包(首次使用请运行install.packages("purrr")) library(purrr) # 定义原始数据 example <- list(c(1, 5, 3, 6, 3), c(4, 2, 56, 2, 56, 2), c(4, 2, 6, 2, 6, 1, 34)) count <- c(5, 2, 1) # 按次数重复并展开为单层列表 result <- map2(example, count, ~ rep(list(.x), .y)) %>% flatten() # 验证结果 length(result) # 输出:8
这里map2()会把每个列表元素和对应的次数配对,用rep(list(.x), .y)把单个元素重复指定次数(注意要把元素包在list()里,不然会把向量拆分成单个数值元素),最后flatten()把嵌套的列表展开成你需要的单层列表。
两种方法都能得到你想要的结果,选哪种取决于你平时的代码风格哦~
内容的提问来源于stack exchange,提问作者Jack Arnestad
相关产品推荐
相关产品推荐

