Как рассчитать матрицу расстояний по диагональной линии? - PullRequest
0 голосов
/ 04 февраля 2019

Предположим, у нас есть фрейм данных с именем Pred .

Он состоит из 1 пользователя на строку.

Пользователи указаны по их уникальному userID .

Пользователи могут быть сгруппированы по кластеру 1012 *, к которому они принадлежат.

Пользователи сообщили о своей уверенности и вызове для задачи, эта информация сохраняется как Conf и Chall соответственно.

Обратите внимание, что оба Conf и Chall имеют одинаковый диапазон от 1 до 6

cluster   userID      Conf        Chall
1           A           5           3
2           B           3           2
1           C           6           1
1           D           3           4
2           E           2           4
2           F           3           5
1           G           6           2
1           H           5           5
2           I           6           2
2           J           5           4
2           K           1           1
1           L           3           5
1           M           4           4

Допустим, мы разбрасываем-плот, где Conf находится на оси X, а Chall находится на оси Y.

Точки, где:

Conf == Chall

будет на диагональной линии, проходящей через начало координат.

Теперь мне интересно найти расстояние каждого пользователя отдиагональная линия на основе их координат:

(Conf, Chall) 

В целом, вопрос касается нахождения расстояния точек (Conf, Chall) от линии на диагонали.

Примечание : Обратите внимание, что я не заинтересован в построении графика.Я заинтересован в расчете вектора расстояния.

Я понимаю, что это, возможно, очень простой вопрос, но я боролся в течение последних нескольких дней.Простой пример демонстрационного кода поможет мне понять эту проблему.

Буду признателен за любые рекомендации по этому вопросу!

1 Ответ

0 голосов
/ 04 февраля 2019

Евклидово расстояние от точки (x, y) до диагональной линии задается как

abs(x - y) / sqrt(2)

См., Например, здесь .Таким образом, вы можете использовать

(Pred$distance <- abs(Pred$Conf - Pred$Chall) / sqrt(2))
# [1] 1.4142136 0.7071068 3.5355339 0.7071068 1.4142136 1.4142136 2.8284271
# [8] 0.0000000 2.8284271 0.7071068 0.0000000 1.4142136 0.0000000
...