Как использовать функцию dist в R (с примерами)


Функцию dist() в R можно использовать для вычисления матрицы расстояний, которая отображает расстояния между строками матрицы или фрейма данных.

Эта функция использует следующий базовый синтаксис:

dist(x, метод=”евклидов”)

куда:

  • x: имя матрицы или фрейма данных.
  • метод: используемая мера расстояния. По умолчанию используется «евклидово», но варианты включают «максимум», «манхэттен», «канберра», «двоичный» или «минковский».

В следующих примерах показано, как использовать эту функцию на практике со следующим фреймом данных:

#define four vectors
a <- c(2, 4, 4, 6)
b <- c(5, 5, 7, 8)
c <- c(9, 9, 9, 8)
d <- c(1, 2, 3, 3)

#row bind four vectors into matrix
mat <- rbind(a, b, c, d)

#view matrix
mat

 [,1] [,2] [,3] [,4]
a 2 4 4 6
b 5 5 7 8
c 9 9 9 8
d 1 2 3 3

Пример 1. Использование dist() для вычисления евклидова расстояния

Евклидово расстояние между двумя векторами, A и B, рассчитывается как:

Евклидово расстояние = √ Σ(A i -B i ) 2

В следующем коде показано, как вычислить матрицу расстояний, которая показывает евклидово расстояние между каждой строкой матрицы в R:

#calculate Euclidean distance between each row in matrix
dist(mat)

 a b c
b 4.795832 
c 10.148892 6.000000 
d 3.872983 8.124038 13.190906

Вот как интерпретировать вывод:

  • Евклидово расстояние между строками a и b равно 4,795832 .
  • Евклидово расстояние между строками a и c равно 10,148892 .
  • Евклидово расстояние между строками a и d равно 3,872983 .
  • Евклидово расстояние между строкой b и строкой c равно 6.000000 .
  • Евклидово расстояние между строками b и d равно 8,124038 .
  • Евклидово расстояние между строками c и d равно 13,190906 .

Пример 2: Используйте dist() для вычисления максимального расстояния

Максимальное расстояние между двумя векторами, A и B, рассчитывается как максимальная разница между любыми парными элементами.

В следующем коде показано, как вычислить матрицу расстояний, которая показывает максимальное расстояние между каждой строкой матрицы в R:

#calculate Maximum distance between each row in matrix
dist(mat, method=" maximum ")

 a b c
b 3 
c 7 4 
d 3 5 8

Пример 3. Использование dist() для расчета расстояния до Канберры

Канберрское расстояние между двумя векторами, A и B, рассчитывается как:

Канберрское расстояние = Σ |A i -B i | / |А я | + |Б я |

В следующем коде показано, как вычислить матрицу расстояний, которая показывает канберрское расстояние между каждой строкой матрицы в R:

#calculate Canberra distance between each row in matrix
dist(mat, method=" canberra ")

 a b c
b 0.9552670 
c 1.5484515 0.6964286 
d 1.1428571 1.9497835 2.3909091

Пример 4. Использование dist() для вычисления двоичного расстояния

Бинарное расстояние между двумя векторами, A и B, рассчитывается как доля элементов, которые являются общими для двух векторов.

В следующем коде показано, как вычислить матрицу расстояний, которая показывает двоичное расстояние между каждой строкой матрицы в R:

#calculate Binary distance between each row in matrix
dist(mat, method=" binary ")

 a b c
b 0 
c 0 0 
d 0 0 0

Пример 5. Использование dist() для вычисления расстояния Минковского

Расстояние Минковского между двумя векторами, A и B, рассчитывается как:

Расстояние Минковского = (Σ|a i – b i | p ) 1/p

где i — i -й элемент в каждом векторе, а p — целое число.

В следующем коде показано, как вычислить матрицу расстояний, которая показывает расстояние Минковского (с использованием p = 3) между каждой строкой матрицы в R:

#calculate Minkowski distance between each row in matrix
dist(mat, method=" minkowski", p= 3 )

 a b c
b 3.979057 
c 8.439010 5.142563 
d 3.332222 6.542133 10.614765

Дополнительные ресурсы

Как рассчитать сходство Жаккара в R
Как рассчитать сходство косинусов в R
Как рассчитать скалярный продукт в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.