У меня таблица выглядит как
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 до конца по строкам. Или у вас есть другой способ?
Я хочу использовать его вместе с агрегатной функцией, поэтому решение должно быть одной единственной функцией.
Большое спасибо.
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
Другой подход:
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
- имя вашего фрейма данных.
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.