我为这个非常基本的问题道歉,但经过几个小时的搜索,我还没有找到答案。我有一个矩阵,有5个重复(1:5)的变量(cADP)
cADP2
[,1]
[1,] -3.932778
[2,] -3.807778
[3,] -3.515652
[4,] -2.853333
[5,] -2.054667
我想计算每个变量的所有排列之间的减法,即1-2,1-3,1-4,1-5,2-3,2-4,2-5,3-4, 3-5,4-5 但无法弄清楚所需的代码。非常感谢您提供的任何帮助。
答案 0 :(得分:1)
尝试使用“ - ”outer
作为函数:
cADP2 <- c(-3.932778,-3.807778,-3.515652,-2.853333,-2.054667)
outer(cADP2,cADP2,"-")
[,1] [,2] [,3] [,4] [,5]
[1,] 0.000000 -0.125000 -0.417126 -1.079445 -1.878111
[2,] 0.125000 0.000000 -0.292126 -0.954445 -1.753111
[3,] 0.417126 0.292126 0.000000 -0.662319 -1.460985
[4,] 1.079445 0.954445 0.662319 0.000000 -0.798666
[5,] 1.878111 1.753111 1.460985 0.798666 0.000000
如果您想要这种矩阵的长格式,可以使用来自reshape
的融合:
res <- outer(cADP2,cADP2,"-")
melt(res)
X1 X2 value
1 1 1 0.000000
2 2 1 0.125000
3 3 1 0.417126
4 4 1 1.079445
5 5 1 1.878111
...
如果您只想要排列的一侧(1-2但不是2-1),则可以使用upper.tri
或lower.tri
。这将为您提供一个向量:
res <- outer(cADP2,cADP2,"-")
res[upper.tri(res)]
-0.125000 -0.417126 -0.292126 -1.079445 -0.954445 -0.662319 -1.878111 -1.753111 -1.460985 -0.798666