Мои данные состоят из пройденного расстояния и времени для долларовых купюр. Мои данные выглядят так:
bid ts latitude longitude
1 123 0 38.40513 41.83777
2 123 23 38.41180 41.68493
3 123 45 42.20771 43.36318
4 123 50 40.22803 43.00208
5 456 0 39.12882 42.73877
6 456 12 38.46078 42.79847
7 456 27 40.53698 42.57617
8 456 19 39.04038 42.17070
9 234 0 39.18274 41.17445
10 234 8 39.58652 43.61317
11 234 15 41.32383 41.49377
12 234 23 40.26008 42.01927
ставка = идентификатор счета
ts = отметка времени (дни), рассчитанная из исходной точки данных, когда t = 0
широта и долгота = местоположение
Эти данные показывают движение идентификаторов счетов в США.
Я хочу вычислить разницу в квадрате расстояния и времени между всеми возможными комбинациями каждой группы строк, равной 4. Например, для группы ставок 123 я хочу вычислить разницу в расстоянии и времени между строкой 1 и строкой 2, ряд 1 и ряд 3, ряд 1 и ряд 4, ряд 2 и ряд 3, ряд 2 и ряд 4, ряд 3 и ряд 4.
Это дало бы мне все возможные комбинации вычислений между этой группировкой ставок.
Я смог сделать это с помощью dplyr между последовательными строками следующим образом:
detach("package:plyr", unload=TRUE)
library(magrittr)
library(dplyr)
library(geosphere)
deltadata <- group_by(df, bid) %>%
mutate(
dsq = (c(NA,distHaversine(cbind(longitude[-n()], latitude[-n()]),
cbind(longitude[ -1], latitude[ -1]))))^2,
dt = c(NA, diff(ts))
)%>%
ungroup() %>%
filter( ! is.na(dsq) )
deltadata
# A tibble: 21 x 6
bid ts latitude longitude dsq dt
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 123 23 38.41180 41.68493 178299634 23
2 123 45 42.20771 43.36318 198827672092 22
3 123 50 40.22803 43.00208 49480260636 5
4 456 12 38.46078 42.79847 5557152213 12
5 456 27 40.53698 42.57617 53781504422 15
6 456 19 39.04038 42.17070 28958550947 -8
7 234 8 39.58652 43.61317 46044153364 8
8 234 15 41.32383 41.49377 69621429008 7
9 234 23 40.26008 42.01927 15983792199 8
10 345 5 40.25700 41.69525 26203255328 5
# ... with 11 more rows
ПРОБЛЕМА: вычисляется только квадратное расстояние и время между последовательными строками, а именно: строка 1 и строка 2, строка 2 и строка 3, строка 3 и строка 4.
Есть ли практический способ сделать это для всех возможных комбинаций строк в каждой группе?
Я хотел бы, чтобы в моем выводе было 6 вычислений для каждой ставки, например:
# A tibble: 21 x 6
bid ts latitude longitude dsq dt
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 123 23 38.41180 41.68493 178299634 23 (for rows 1 and 2)
2 123 45 42.20771 43.36318 198827672092 22 (for rows 1 and 3)
3 123 50 40.22803 43.00208 49480260636 5 (for rows 1 and 4)
4 123 12 38.46078 42.79847 5557152213 12 (for rows 2 and 3)
5 123 27 40.53698 42.57617 53781504422 15 (for rows 2 and 4)
6 123 19 39.04038 42.17070 28958550947 -8 (for rows 2 and 5)
Я новичок в R, поэтому любые предложения приветствуются!