这个问题非常类似于this one,但不是将每个原始组中的一个项目放入每个输出组,而是希望每个输出组中的每个原始组中有多个项目.

我有以下数据.

list1 <- list(Group_1 = c("1", "2", "3", "4", "5", "6"), Group_2 = c("13", "14", "15", "16", "17", "18"), Group_3 = c("19", "20", "21", "22", "23", "24", "25"))
Number_of_Items_From_Each_Original_Group_to_End_up_in_Each_Output_Group <- 2

Group_1包含6项,Group_2包含6项,Group_3包含7项.基于这些初始组,我想将项目放入3个新组中,确保每个新组中包含与每个原始组相同数量(2或Number_of_Items_From_Each_Original_Group_to_End_up_in_Each_Output_Group)的项目.此外,这3个新组中的每个组都不能重复任何项目-每个新组只能使用一次每个项目.例如,一个可能的输出可以是下面的输出.

(list(New_Group_1 = c("1", "2", "13", "14", "19", "20"), New_Group_2 = c("3", "4", "15", "16", "21", "22"), New_Group_3 = c("5", "6", "17", "18", "23", "24")))

我实际上想生成list个输出,显示每个可能的输出(每个可能的组合).对于每个列表元素,应该有三个新组,每个组中应该有不同的项.例如,除了上述解决方案之外,另一个解决方案可以是以下解决方案.

(list(New_Group_1 = c("3", "4", "13", "14", "19", "20"), New_Group_2 = c("5", "6", "15", "16", "21", "22"), New_Group_3 = c("1", "2", "17", "18", "23", "24")))

我问的here个问题非常相似,除了这个问题,我只把每个原始组中的一个项目放入每个新组中.在这里,我想有一个选项,将每个原始组中的多个项目放入每个新组中.

推荐答案

这相当棘手,而且相当缓慢,因为有23625个指定的三组可能的组合

n <- 2

all_pairs <- lapply(list1, function(group) {
  all_combs <- apply(combn(ncol(combn(length(group), n)), length(list1)), 
                     2,
        function(x) c(combn(length(group), n)[,x]), simplify = FALSE)
  
  all_combs[sapply(all_combs, function(x) !any(duplicated(x)))]
})

index_df <- do.call(expand.grid, lapply(all_pairs, function(x) seq(length(x))))

result <- apply(index_df, 1, function(x) {
  m <- t(sapply(seq_along(x), function(y) list1[[y]][all_pairs[[y]][[x[y]]]]))
  setNames(lapply(split(m, (seq_along(m)-1) %/% (length(list1) * n)),
         function(x) c(t(matrix(x, ncol = n)))), names(list1))
}, simplify = FALSE)

结果列表如下所示:

head(result)
#> [[1]]
#> [[1]]$Group_1
#> [1] "1"  "2"  "13" "14" "19" "20"
#> 
#> [[1]]$Group_2
#> [1] "3"  "4"  "15" "16" "21" "22"
#> 
#> [[1]]$Group_3
#> [1] "5"  "6"  "17" "18" "23" "24"
#> 
#> 
#> [[2]]
#> [[2]]$Group_1
#> [1] "1"  "2"  "13" "14" "19" "20"
#> 
#> [[2]]$Group_2
#> [1] "3"  "5"  "15" "16" "21" "22"
#> 
#> [[2]]$Group_3
#> [1] "4"  "6"  "17" "18" "23" "24"
#> 
#> 
#> [[3]]
#> [[3]]$Group_1
#> [1] "1"  "2"  "13" "14" "19" "20"
#> 
#> [[3]]$Group_2
#> [1] "3"  "6"  "15" "16" "21" "22"
#> 
#> [[3]]$Group_3
#> [1] "4"  "5"  "17" "18" "23" "24"
#> 
#> 
#> [[4]]
#> [[4]]$Group_1
#> [1] "1"  "3"  "13" "14" "19" "20"
#> 
#> [[4]]$Group_2
#> [1] "2"  "4"  "15" "16" "21" "22"
#> 
#> [[4]]$Group_3
#> [1] "5"  "6"  "17" "18" "23" "24"
#> 
#> 
#> [[5]]
#> [[5]]$Group_1
#> [1] "1"  "3"  "13" "14" "19" "20"
#> 
#> [[5]]$Group_2
#> [1] "2"  "5"  "15" "16" "21" "22"
#> 
#> [[5]]$Group_3
#> [1] "4"  "6"  "17" "18" "23" "24"
#> 
#> 
#> [[6]]
#> [[6]]$Group_1
#> [1] "1"  "3"  "13" "14" "19" "20"
#> 
#> [[6]]$Group_2
#> [1] "2"  "6"  "15" "16" "21" "22"
#> 
#> [[6]]$Group_3
#> [1] "4"  "5"  "17" "18" "23" "24"

reprex package(v2.0.1)于2022-06-09创建

R相关问答推荐

如何将y轴设置为在ggplot 2中x=0处与x轴相交?

替换字符的所有实例,但仅限于匹配字符串中

如何判断R中一列的值是否在所有其他列中重复?

Select 与特定列中最大值对应的数据帧行

为什么stat_bin在R中的ggplot中显示错误的数字?

如何在弹性表中为类别值的背景上色

有没有方法将琴弦完全捕捉到R中的多边形?

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

在垂直轴中包含多个ggplot2图中的平均值

r—绘制相交曲线

derrr summarise每个组返回多行?

如何利用模型函数在格图中添加双曲/指数曲线

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

如何在所有绘图中保持条件值的 colored颜色 相同?

我正在努力用R计算数据集中的中值逐步距离

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

R-按最接近午夜的时间进行筛选

将具有坐标列表列的三角形转换为多个多边形

为什么将负值向量提升到分数次方会得到NaN