首页 > 解决方案 > 用R中2组之间的对组合构建矩阵

问题描述

我有两组点:一组包含 8 个起点,另一组包含 8 个终点。我的目标是建立一个包含所有两对(start1,end1)和(start2,end2)的矩阵。第一组有 8 个起点(pt1, ... pt8),终点组是(pt9, ... pt16)。我想用两组之间的所有点对来构建矩阵,如下所示:

[pt1 pt9 pt2 pt10
 pt3 pt11 pt4 pt12
 pt5 pt13 pt6 pt14
 ...
#and then crossed pairs
 pt1 pt10 pt2 pt9
 etc... ]

第一列和第三列包含 2 对的起点,第二列和第四列包含关联的终点。我尝试了循环排列,但没有得到所有组合。

标签: rmatrixcombinations

解决方案


您可以使用expand.grid来创建所有可能的对,然后expand.grid再次使用来生成对的所有排列,如下所示:

s <- 1:8
e <- 9:16
pairCombi <- expand.grid(s,e)
ix <- expand.grid(seq_len(nrow(pairCombi)), seq_len(nrow(pairCombi)))
ans <- as.data.frame(t(apply(ix[ix$Var1 != ix$Var2, ], 1L, function(n) {
    c(unlist(pairCombi[n[1L],]), unlist(pairCombi[n[2L],]))
})))
colnames(ans) <- paste0("Var", seq_len(ncol(ans)))

推荐阅读