У меня есть следующий кадр данных точек кластера и их соответствующих координат:
library(tidyverse)
dat <- structure(list(clusters = c("1", "10", "11", "12", "13", "14",
"15", "2", "3", "4", "5", "6", "7", "8", "9"), X = c(-54.6159770964014,
-28.2872926332498, 52.8522393678039, -25.8140448004464, 38.9620763534183,
70.8641808918484, -15.1724011440888, 40.730220888559, 9.24483114349649,
-55.927722121683, -6.27401943653456, -64.5652744957147, 18.7919353226617,
20.0562482846276, -15.9544504453054), Y = c(8.22248244829743,
28.9054292231316, -34.6075657907431, -37.9486871165297, -12.736119840414,
-3.14128802462344, -1.12492457003011, 21.0867357880599, -17.678289925719,
40.2262495018696, 33.0017714263723, -24.491950293976, 56.579084048791,
-47.9835978682792, 71.6687592084785)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -15L))
dat
#> # A tibble: 15 x 3
#> clusters X Y
#> <chr> <dbl> <dbl>
#> 1 1 -54.6 8.22
#> 2 10 -28.3 28.9
#> 3 11 52.9 -34.6
#> 4 12 -25.8 -37.9
#> 5 13 39.0 -12.7
#> 6 14 70.9 -3.14
#> 7 15 -15.2 -1.12
#> 8 2 40.7 21.1
#> 9 3 9.24 -17.7
#> 10 4 -55.9 40.2
#> 11 5 -6.27 33.0
#> 12 6 -64.6 -24.5
#> 13 7 18.8 56.6
#> 14 8 20.1 -48.0
#> 15 9 -16.0 71.7
Визуально это выглядит так:

Что я хотел сделать, это рассчитать расстояние между точками.
Это моя попытка использовать евклидово расстояние:
dm <- dist(dat[-1])
dm
Результат таков:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 33.48110
3 115.68851 103.04137
4 54.41809 66.89985 78.73720
5 95.89638 79.09802 25.90940 69.50985
6 125.99367 104.20176 36.25682 102.75327 33.31374
7 40.53603 32.76923 75.81846 38.33059 55.36571 86.06021
8 96.21012 69.45897 56.99823 88.95685 33.86904 38.66591 60.15364
9 68.91337 59.82226 46.77827 40.49708 30.12540 63.31089 29.49941 49.94053
10 32.03064 29.86895 132.03477 83.77442 108.66962 134.00347 58.05959 98.53466 87.18026
11 54.32272 22.39116 89.81613 73.59198 64.32930 85.18581 35.26773 48.49089 53.00286 50.17652
12 34.19390 64.55519 117.85244 41.02123 104.19267 137.10211 54.64132 114.73691 74.12393 65.29206 81.87428
13 87.90383 54.61030 97.34017 104.52365 72.19025 79.23409 66.95766 41.72523 74.86858 76.48818 34.41209 116.27956
14 93.46157 90.82412 35.41885 46.95512 39.99769 67.76635 58.62417 72.09802 32.17605 116.42397 85.15816 87.82175 104.57033
15 74.29767 44.50619 126.60576 110.05997 100.69761 114.60374 72.79788 75.97166 92.83264 50.85758 39.86034 107.74922 37.88152 124.95382
Я обнаружил, что результат не соответствует цифре. Например
визуально кластер 6 к 1 визуально ближе, чем кластер 6 к 2.
Но расстояние, рассчитанное по dist()
, равно:
6 to 1, distance = 125.99367
6 to 2, distance = 104.20176
Какой адекватный способ рассчитать это так, чтобы значение соответствовало графику?