将5元素向量拆分为指定长度的所有组合并计算汇总统计量
解决R语言向量拆分与统计量计算问题
嘿,刚好能帮你搞定这个需求!你已经用combn(data, 3)拿到了所有长度为3的子集,接下来只需要匹配对应的2元素补集,再计算统计量就大功告成啦,一步步来:
1. 准备基础数据与生成3元素组合
首先先确认原始数据和你已经写好的代码:
# 原始向量 data <- c(42.3, 51.5, 53.7, 53.1, 50.7) # 生成所有长度为3的组合,返回矩阵,每一列是一个组合 table1 <- combn(data, 3)
这里table1是一个3行10列的矩阵(因为组合数C(5,3)=10),每一列对应一种3元素的拆分方式。
2. 生成对应的2元素补集组合
每个3元素组合的补集就是我们需要的2元素组合,用apply配合setdiff就能轻松拿到:
# 对table1的每一列(即每个3元素组合),找出原始数据中不在该列的元素,得到2元素组合 table2 <- apply(table1, 2, function(subset_3) setdiff(data, subset_3))
现在table2是一个包含10个元素的列表,每个元素都是长度为2的向量,刚好对应table1每一列的补集。
3. 整合组合并计算统计量
接下来我们可以把这两部分组合起来,同时计算每个子集的统计量(比如均值、中位数、标准差),用数据框来展示会更清晰:
# 创建一个空的数据框来存储结果 result_df <- data.frame( 组合编号 = 1:ncol(table1), 三元素组合 = sapply(1:ncol(table1), function(i) paste(table1[,i], collapse = ", ")), 三元素均值 = apply(table1, 2, mean), 三元素标准差 = apply(table1, 2, sd), 二元素组合 = sapply(table2, function(x) paste(x, collapse = ", ")), 二元素均值 = sapply(table2, mean), 二元素标准差 = sapply(table2, sd) ) # 查看结果 print(result_df)
运行这段代码后,你会得到一个包含所有10种拆分组合,以及每个子集的均值、标准差的完整表格,完全满足需求。
补充说明
- 如果需要其他统计量(比如中位数、最大值最小值),只需要把
apply或者sapply里的函数换成median、max、min就可以了。 - 如果你更习惯用列表来存储每个组合的完整信息,也可以用
map2(来自purrr包)来配对table1的列和table2的元素,生成结构化的列表对象。
内容的提问来源于stack exchange,提问作者Eleven-87
相关产品推荐
相关产品推荐

