r - 结果列表的成对矩阵
问题描述
假设我们有一个矩阵M
M <- matrix(c(1:9),3,3)
diag(M) <- NA
M
[,1] [,2] [,3]
[1,] NA 4 7
[2,] 2 NA 8
[3,] 3 6 NA
其中每个条目描述了成对交互的结果。行i
与列的每次交互都j
被解释为“对象i
优于对象j
X 次”。示例:在 2 种情况下,对象 2 的性能优于对象 1。在 7 个案例中,对象 1 的性能优于对象 3。
有没有一种快速的方法可以将此矩阵转换为以每行完全描述两个对象之间的交互的格式保存此信息的对象?目标是这样的:
[,1] [,2] [,3] [,4]
[1,] "OBJ1" "OBJ2" "N1" "N2"
[2,] "1" "2" "4" "2"
[3,] "1" "3" "7" "3"
[4,] "2" "3" "8" "6"
其中前两列给出了比较的对象,而第 3 列和第 4 列描述了OBJ1
表现优异的频率OBJ2
,反之亦然。第一行的解释是:对象 1 的表现优于对象 2 4 倍,而对象 2 的表现优于对象 1 2 倍。到目前为止,我一直在玩弄reshape2
和汇总,但没有得到有用的结果。
解决方案
也许你可以试试下面的代码
inds <- t(combn(dim(M)[1], 2))
Mout <- `colnames<-`(
cbind(inds, M[inds], M[inds[, 2:1]]),
do.call(paste0, rev(expand.grid(1:2, c("Obj", "N"))))
)
这使
> Mout
Obj1 Obj2 N1 N2
[1,] 1 2 4 2
[2,] 1 3 7 3
[3,] 2 3 8 6
推荐阅读
- javascript - 在Vue中的方法内部调用方法
- agora.io - 如何在 agora.io 踢用户?
- python - 当行数据分为两个单独的页面时,如何正确地从pdf中提取表格数据?
- c - 标签页的文本没有正确显示 unicode 字符串
- python - aiohttp.web post 方法获取参数
- android - 为什么 Facebook 登录不适用于我的免安装应用?
- r - R中的子集数据框,dplyr过滤列A的行值而不是B列的行中的NA
- python - Python3 Flask API - 以字节数组形式发送和接收图像
- javascript - Visual Studio Code 是否有“后退”按钮?
- node.js - 最大调用堆栈大小超过了猫鼬 nodejs