Расстояние между двумя 3D точками в R - PullRequest
0 голосов
/ 24 октября 2018

У меня есть две 2 точки A (x, y, z) e B (x1, y1, z1).Я хочу вычислить евклидово расстояние между этими точками в time1, time2, time3.

Итак, у меня есть такая матрица:

         x     y     z     x1     y1     z1    distance
time1    2     1     2      4      6      8       ?
time2    3     4     3      6      6      7       ?
time3    6     8     9      4      3      3       ?

Как вы можете видеть выше, я хочудобавить столбец (расстояние), в котором я сообщаю евклидово расстояние между A e B.

Есть ли у вас какие-либо предложения?

1 Ответ

0 голосов
/ 24 октября 2018

Вам нужна функция dist():

df <- read.table(header = TRUE, text = "
         x     y     z     x1     y1     z1
time1    2     1     2      4      6      8
time2    3     4     3      6      6      7
time3    6     8     9      4      3      3")

df$distance <- apply(df, 1, function(x) dist(matrix(x, nrow = 2, byrow = TRUE)))

df
#>       x y z x1 y1 z1 distance
#> time1 2 1 2  4  6  8 8.062258
#> time2 3 4 3  6  6  7 5.385165
#> time3 6 8 9  4  3  3 8.062258

Создано в 2018-10-24 с помощью пакета Представить (v0.2.1)

С help("dist"):

Описание

Эта функция вычисляет и возвращает матрицу расстояний, вычисленную с использованием указанной меры расстояния для вычисления расстояний между строкамиматрицы данных.

Использование

dist (x, method = "евклидов", diag = FALSE, верхний = FALSE, p = 2)

Так, если вы дадите ей матрицу m, такую ​​как

2 1 2
4 6 8

distance(m), будет вычислено евклидово расстояние между c(2, 1, 2) и c(4, 6, 8).Затем мы можем просто применить к каждой строке вашего набора данных функцию dist(), вызываемую из матрицы, построенной из этой строки, где первая строка новой матрицы - это наблюдения x, y и z для этогострока вашего набора данных, а вторая строка новой матрицы - это наблюдения x1, y1 и z1 для этой строки вашего набора данных.

...