我有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对的起点,第二列和第四列与终点关联。我尝试使用圆形排列,但没有得到所有组合。
答案 0 :(得分:0)
您可以使用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)))