2

我正在处理的原始数据集有超过 20000 行。这个的浓缩版本看起来像下面这样

  Row      x      y      z      Group   Survive
  1        0.0680 0.8701 0.0619 1       78.43507
  2        0.9984 0.0016 0.0000 1       89.55533
  3        0.4146 0.5787 0.0068 1       85.35468
  4        0.3910 0.6016 0.0074 2       67.49987
  5        0.3902 0.6023 0.0075 2       81.87669   
  6        0.0621 0.8701 0.0678 2       27.26777
  7        0.6532 0.3442 0.0026 3       53.03938  
  8        0.6508 0.3466 0.0026 3       62.32931 
  9        0.9977 0.0023 0.0000 3       97.00324

我的目标是创建一个名为 Match1 的列,如下所示

  Row      x      y      z      Group   Survive   Match1
  1        0.0680 0.8701 0.0619 1       78.43507  g1r1-g2r3
  2        0.9984 0.0016 0.0000 1       89.55533  g1r2-g2r1
  3        0.4146 0.5787 0.0068 1       85.35468  g1r3-g2r2
  1        0.3910 0.6016 0.0074 2       67.49987  g1r2-g2r1
  2        0.3902 0.6023 0.0075 2       81.87669  g1r3-g2r2 
  3        0.0621 0.8701 0.0678 2       27.26777  g1r1-g2r3
  1        0.6532 0.3442 0.0026 3       53.03938  NA
  2        0.6508 0.3466 0.0026 3       62.32931  NA
  3        0.9977 0.0023 0.0000 3       97.00324  NA

g1r1-g2r3,g1r2-g2r1,g1r3-g2r2值背后的逻辑如下

第一步,基于 Mahalanobis 或简单距离方法在 Group1 和 Group2 中的行之间生成距离矩阵,sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)

  0.4235 = sqrt{ (0.3910-0.0680)^2 + (0.6016-0.8701)^2 + (0.0074-0.0619)^2} 
  0.4225 = sqrt{ (0.3902-0.0680)^2 + (0.6023-0.8701)^2 + (0.0075-0.0619)^2}
  0.0083 = sqrt{ (0.0621-0.0680)^2 + (0.8701-0.8701)^2 + (0.0678-0.0619)^2}  

  0.8538 = sqrt{ (0.3910-0.9984)^2 + (0.6016-0.0016)^2 + (0.0074-0.0000)^2} 
  0.8549 = sqrt{ (0.3902-0.9984)^2 + (0.6023-0.0016)^2 + (0.0075-0.0000)^2}
  1.2789 = sqrt{ (0.0621-0.9984)^2 + (0.8701-0.0016)^2 + (0.0678-0.0000)^2}

  0.0329 = sqrt{ (0.3910-0.4146)^2 + (0.6016-0.5787)^2 + (0.0074-0.0068)^2} 

Group1 vs Group2

        g2r1    g2r2    g2r3
g1r1    0.4235  0.4225  0.0083
g1r2    0.8538  0.8549  1.2789
g1r3    0.0329  0.0340  0.4614

第二步,找到每行中的最小或最小距离。

        g2r1        g2r2        g2r3
g1r1    0.4235      0.4225      **0.0083**
g1r2    **0.8538**  0.8549      1.2789
g1r3    0.0329*     **0.0340**  0.4614

该列Match1的值为 g1r1-g2r3,因为 rows 、 Row1-Group1 和 Row3-Group2 的最小距离为 0.0083。类似地 g1r2-g2r1 因为 Row2-Group1 和 Row1-Group2 的结果是最小值 0.8538。尽管 0.0329 是距离矩阵最后一行中的最小值,但我们跳过该值并选择下一个最小值 0.0340,因为选择 0.0329 将导致 Row3-Group1 与 Row1-Group2 配对,并且 Row1-Group2 已经与 Row2-Group1 配对,所以我们选择了下一个最小值 0.0340,这导致了 g1r1-g2r3。

第三步,根据 Step2 中的匹配观测值计算平均存活率。

 (78.43507 - 27.26777) + (89.55533 - 67.49987) + (85.35468 -81.87669)/3 = 25.56692

我不确定如何以编程方式将这些步骤串联在一起,我将不胜感激任何建议或帮助有效地将所有这些部分组合在一起。

4

0 回答 0