Я имею дело с оригинальным набором данных, содержащим более 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, выглядит следующим образом
1-й шаг, матрица расстояний генерируется между строками в Группе 1 и Группе 2 на основе махаланобиса или простого метода расстояния, 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
2-й шаг, найдите минимальное или наименьшее расстояние в каждом ряду.
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, поскольку строки 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.
3-й шаг, рассчитать среднюю выживаемость на основе сопоставленных наблюдений в Шаге 2.
(78.43507 - 27.26777) + (89.55533 - 67.49987) + (85.35468 -81.87669)/3 = 25.56692
Я не уверен, как программно связать воедино эти шаги, я был бы признателен за любые предложения или помог бы эффективно собрать все эти части.