如何计算多个变量的所有成对差异

How to calculate all pairwise difference for multiple varibles

我需要计算每个变量的所有成对差异(我的数据集中有 100 个):

然后我想汇总(所有)每对和的值并将它们排列在矩阵中。

如果我们需要 matrix

,我们可以使用 outer
outer(seq_along(df1), seq_along(df1), FUN =
      Vectorize(function(i, j) sum(df1[[i]] - df1[[j]], na.rm = TRUE)))

-输出

 [,1]  [,2]  [,3]
[1,]   0.00 47.80 56.49
[2,] -47.80  0.00  8.69
[3,] -56.49 -8.69  0.00

或者如果我们不需要冗余比较,使用combn

combn(df1, 2, FUN = function(x) sum(x[[1]] - x[[2]], na.rm = TRUE))

-输出

[1] 47.80 56.49  8.69

数据

df1 <- structure(list(V1 = c(67.81, 65.33, 54.67, 53.2, 53.77, 52.66, 
50.77, 47.84, 46.33, 44.15), V2 = c(57.68, 56.58, 52.61, 49.74, 
49.28, 48.03, 46.15, 43.96, 42.76, 41.94), V3 = c(54.04, 54.34, 
52.36, 49.34, 48.93, 48.06, 46.21, 43.51, 42.15, 41.1)),
 class = "data.frame", row.names = c(NA, 
-10L))

另一种方法是使用 dist。在 akrun 的帮助下,我们得到:

dist(t(df1), method = "manhattan")
      V1    V2
V2 47.80      
V3 56.49  8.87