如何基于size_1向量将output向量拆分为指定长度的列表?
基于指定长度拆分向量为列表(R语言)
问题背景
现有如下R代码及输出:
size_1=c(3,4,4,3,2,2) output=c(2, 3, 5, 24, 32, 36, 39, 41, 44, 50, 54, 61, 74, 80, 88, 93, 102, 103)
需要按照size_1中每个元素指定的长度,将output拆分为对应结构的列表,目标结果为:
list(c(2, 3, 5),c(24, 32, 36, 39),c(41, 44, 50, 54),c(61, 74, 80),c(88, 93),c(102, 103))
解决方案
通过生成分组索引结合split()函数即可实现需求:
# 生成与output长度匹配的分组索引 groups <- rep(seq_along(size_1), size_1) # 拆分向量为列表 result <- split(output, groups) # 移除列表命名(与目标结构完全一致) names(result) <- NULL
原理说明
rep(seq_along(size_1), size_1)会生成一个索引向量:前3个元素为1,接下来4个为2,以此类推,总长度与output完全一致。split(output, groups)根据索引将output拆分为对应长度的子向量,自动组合成列表。- 移除命名是为了和目标结构完全匹配,若保留命名不影响使用,可省略最后一步。
内容的提问来源于stack exchange,提问作者Tou Mou
相关产品推荐
相关产品推荐

