列中所有元素之间的差异矩阵

San*_*ndy 2 r distance matrix difference

我有一个数据框df

ID  scores
1   2.1
2   1.3
3   -1
4   -3
5   2.4
Run Code Online (Sandbox Code Playgroud)

scores我有兴趣计算一个差异矩阵,其中包含该列中每个元素与同一列中每个元素(包括其自身)的差异。

我想要的输出是这样的:

    1     2    3    4    5
1   0     0.8  3.1  5.1 -0.3
2  -0.8   0    2.3  4.3 -1.1
3  -3.1  -2.3  0    2   -3.4
4  -5.1  -4.3 -2    0   -5.4
5   0.3   1.1  3.4  5.4  0
Run Code Online (Sandbox Code Playgroud)

以下帖子相关,但要求以另一种方式计算差异查找列表元素所有可能方式的差异

有没有一种简单的方法来实现此输出,也许通过使用dplyr或某些内置函数?非常感谢任何帮助或指导!

All*_*ron 7

您可以使用outer,它是一个基本 R 函数,用于将两个向量元素的所有成对组合传递给二元函数,例如-

df <- data.frame(ID = 1:5, scores = c(2.1, 1.3, -1, -3, 2.4))

outer(df$scores, df$scores, `-`)
     [,1] [,2] [,3] [,4] [,5]
[1,]  0.0  0.8  3.1  5.1 -0.3
[2,] -0.8  0.0  2.3  4.3 -1.1
[3,] -3.1 -2.3  0.0  2.0 -3.4
[4,] -5.1 -4.3 -2.0  0.0 -5.4
[5,]  0.3  1.1  3.4  5.4  0.0
Run Code Online (Sandbox Code Playgroud)

  • 这么高深的回答,谢谢! (2认同)