【问题标题】:How to calculate all pairwise abs differences among many variables in R如何计算R中许多变量之间的所有成对绝对差异
【发布时间】:2021-12-22 17:09:44
【问题描述】:

我需要计算许多变量之间的所有成对绝对差异(我的数据集中有 100 个)。 我希望为每个差异获得一列:

我尝试了下一个函数,但它总结了结果,我不需要总和,而是所有单个 abs 差异。

outer(seq_along(rio_csv), seq_along(rio_csv), FUN =
              Vectorize(function(i, j)abs(sum(rio_csv[[i]] - rio_csv[[j]], na.rm = FALSE))))

数据

df <- data.frame(v1=1:6,V2=7:12,V3=13:18,v4=19:24,v5=25:30,v6=31:36)

【问题讨论】:

  • 你想要什么输出?

标签: r vector pairwise


【解决方案1】:

也许combn 会给你想要的。它本身只报告组合,但您可以提供一个传递单个参数的函数,这两个参数的向量长度为​​ 2。

combn(6,2)
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
# [1,]    1    1    1    1    1    2    2    2    2     3     3     3     4     4     5
# [2,]    2    3    4    5    6    3    4    5    6     4     5     6     5     6     6
combn(6, 2, FUN = function(i) df[,i[1]] - df[,i[2]])
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
# [1,]   -6  -12  -18  -24  -30   -6  -12  -18  -24    -6   -12   -18    -6   -12    -6
# [2,]   -6  -12  -18  -24  -30   -6  -12  -18  -24    -6   -12   -18    -6   -12    -6
# [3,]   -6  -12  -18  -24  -30   -6  -12  -18  -24    -6   -12   -18    -6   -12    -6
# [4,]   -6  -12  -18  -24  -30   -6  -12  -18  -24    -6   -12   -18    -6   -12    -6
# [5,]   -6  -12  -18  -24  -30   -6  -12  -18  -24    -6   -12   -18    -6   -12    -6
# [6,]   -6  -12  -18  -24  -30   -6  -12  -18  -24    -6   -12   -18    -6   -12    -6

例如,第一次调用 anon-func 时,ic(1L, 2L)

【讨论】:

    【解决方案2】:

    可能让您恼火的是,当您删除 sum 时,outer 不起作用(我确定您尝试过)。那是因为Vectorize的结果不能简化成矩阵(默认),所以我们可以设置成FALSE

    r <- outer(seq_along(df), seq_along(df),
               FUN=Vectorize(function(i, j) abs(df[[i]] - df[[j]]), SIMPLIFY=FALSE))
    

    结果

    matrix(unlist(r), nrow(df))
    #      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36]
    # [1,]    0    6   12   18   24   30    6    0    6    12    18    24    12     6     0     6    12    18    18    12     6     0     6    12    24    18    12     6     0     6    30    24    18    12     6     0
    # [2,]    0    6   12   18   24   30    6    0    6    12    18    24    12     6     0     6    12    18    18    12     6     0     6    12    24    18    12     6     0     6    30    24    18    12     6     0
    # [3,]    0    6   12   18   24   30    6    0    6    12    18    24    12     6     0     6    12    18    18    12     6     0     6    12    24    18    12     6     0     6    30    24    18    12     6     0
    # [4,]    0    6   12   18   24   30    6    0    6    12    18    24    12     6     0     6    12    18    18    12     6     0     6    12    24    18    12     6     0     6    30    24    18    12     6     0
    # [5,]    0    6   12   18   24   30    6    0    6    12    18    24    12     6     0     6    12    18    18    12     6     0     6    12    24    18    12     6     0     6    30    24    18    12     6     0
    # [6,]    0    6   12   18   24   30    6    0    6    12    18    24    12     6     0     6    12    18    18    12     6     0     6    12    24    18    12     6     0     6    30    24    18    12     6     0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多