У меня таблица выглядит как

  stamp  a  b    expected result (euclidean distance)
    1    2  1    (3-2)**2+(1-1)**2
    2    3  1    (1-3)**2+(4-1)**2
    3    1  4    last one can be default defined

Как я могу получить ожидаемый результат на основе вычисления функции прокрутки от штампа 1 до конца по строкам. Или у вас есть другой способ?

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

Большое спасибо.

r
0
Hello lad 22 Июл 2014 в 22:57

2 ответа

Лучший ответ

С такими вашими данными

dd<-read.table(text="stamp  a  b
    1    2  1
    2    3  1
    3    1  4", header=T)

Ты мог бы сделать что-то вроде

dd$dist<-c(with(dd, sqrt(diff(a)^2 + diff(b)^2)), NA)

Чтобы получить попарные расстояния

  stamp a b     dist
1     1 2 1 1.000000
2     2 3 1 3.605551
3     3 1 4       NA
1
MrFlick 22 Июл 2014 в 23:09
Большое спасибо за ваш ответ, просто любопытно, есть ли более общее решение для выражения взаимосвязи перекрестных строк в такой функции, как построение формулы f(a[i],a[i+1])+g(b[ я],б[я+1])
 – 
Hello lad
22 Июл 2014 в 23:17
1
Я не знаю ни одного, который я бы рекомендовал для всех случаев. Все зависит от функции и результатов, которые вам нужны.
 – 
MrFlick
22 Июл 2014 в 23:19

Другой подход:

dat$dist <- c(diag(as.matrix(dist(dat[2:3]))[-1, -nrow(dat)]), NA)

#   stamp a b     dist
# 1     1 2 1 1.000000
# 2     2 3 1 3.605551
# 3     3 1 4       NA

Где dat - имя вашего фрейма данных.

0
Sven Hohenstein 23 Июл 2014 в 00:20