r - 用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 对的起点,第二列和第四列包含关联的终点。我尝试了循环排列,但没有得到所有组合。
解决方案
您可以使用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)))
推荐阅读
- jenkins - 初始设置后的新詹金斯服务器 - 空白屏幕
- mongodb - mongo unwind nested array of objects to get get object ids by availiable field
- python - Django IntegrityError:关系“HomeFeed_interest”的“interestreceiver_id”列中的空值违反非空约束
- amazon-web-services - 为什么没有用于 eks pod 配置的 cloudformation?
- sql - SQL如何根据第一列新值更新2列第二列
- javascript - 使用 gltf 时,three.js 中的错误边缘
- docker - docker 容器始终处于暂停状态
- python - 如何在 python 中转换 CSV?
- javascript - Javascript - 文件未在 EDGE 和 IE11 中下载
- rule-engine - 修复 MVC 中 CodeEffects 编辑器返回错误的问题