首页 > 解决方案 > 对于数据集中的每个案例,有没有办法计算应用于该案例的所有标签之间的总距离?

问题描述

对于具有多个二进制变量的数据集,我想创建一个变量来指示案例所附加的每个二进制标签之间的距离总和。

我有一个包含几个二进制变量的数据集,如下所示:

  caseid v1 v2 v3 v4
1    one  0  1  0  1
2    two  1  1  0  0
3  three  0  1  1  1
4   four  1  0  1  1

此外,我已经构建了一个距离矩阵,它显示了任何给定变量对之间的距离。它看起来像这样:

   v1    v2   v3   v4
v1  0   0.5  0.3  0.2
v2 0.5   0   0.1  0.8
v3 0.3  0.1   0   0.4
v4 0.2  0.8  0.4   0 

我想要做的是创建一个新变量,该变量将每种情况下存在的所有变量之间的总距离相加。例如,对于情况三,我想要一个值(v2 和 v3 之间的距离)+(v2 和 v4 之间的距离)+(v3 和 v4 之间的距离)= 0.1 + 0.8 + 0.4 = 1.3。

最终结果将如下所示:

  caseid v1 v2 v3 v4 dist
1    one  0  1  0  1  0.8
2    two  1  1  0  0  0.5
3  three  0  1  1  1  1.3
4   four  1  0  1  1  0.9

显然,对于这几个案例,我可以手动进行计算,但我的数据集有大约 800 个案例和 16 个我感兴趣的变量。有没有办法自动化这个过程?

标签: r

解决方案


您可以使用apply和的组合combn来确定数据帧的每一行您感兴趣的成对组合,从矩阵中检索它们,并将它们相加:

df$dist = apply(df[-1],1,function(x) sum(mat[t(combn(c(1:length(x))[as.logical(x)],2))]))
> df
  caseid v1 v2 v3 v4 dist
1    one  0  1  0  1  0.8
2    two  1  1  0  0  0.5
3  three  0  1  1  1  1.3
4   four  1  0  1  1  0.9

推荐阅读