Назначение значений местоположения на основе даты и времени второго набора данных
У меня есть 2 кадра данных: 1 - это последовательность местоположений GPS с соответствующими датами и временем (POSIXct)
GPS <- data.frame(Lat=c(58.65209, 58.65183, 58.65142, 58.65129, 58.65126, 58.65124, 58.65122, 58.65119, 58.65117, 58.65115),
Lon=c(-3.178559, -3.177934, -3.177277, -3.177536, -3.177494, -3.177713, -3.177806, -3.177899, -3.177991, -3.178084),
datetime=c("2016-10-01 16:23:59 GMT", "2016-10-01 16:31:59 GMT", "2016-10-01 16:39:59 GMT", "2016-10-01 16:47:59 GMT", "2016-10-01 16:55:59 GMT", "2016-10-01 17:03:59 GMT", "2016-10-01 17:11:59 GMT", "2016-10-01 17:19:59 GMT", "2016-10-01 17:27:59 GMT", "2016-10-01 17:35:59 GMT"))
GPS$datetime <- as.POSIXct(as.character(GPS$datetime))
а другая - это последовательность глубин с соответствующими датами (POSIXct).
DEPTH <- data.frame(Depth=c(0.0, 0.1, 0.0, 0.0, 0.1, 1.5, 1.7, 1.7, 1.4, 1.5, 1.8, 2.1, 2.3, 1.7, 2.0, 2.6, 2.2, 2.1, 3.4, 3.3),
datetime=c("2016-10-01 16:22:56 GMT", "2016-10-01 16:23:06 GMT", "2016-10-01 16:23:16 GMT", "2016-10-01 16:23:59 GMT", "2016-10-01 16:24:52 GMT", "2016-10-01 16:25:24 GMT", "2016-10-01 16:32:40 GMT", "2016-10-01 16:32:51 GMT", "2016-10-01 18:45:30 GMT", "2016-10-01 18:45:40 GMT", "2016-10-01 18:46:54 GMT", "2016-10-01 18:47:04 GMT", "2016-10-01 18:47:14 GMT", "2016-10-01 18:47:25 GMT", "2016-10-01 18:51:03 GMT", "2016-10-01 18:51:14 GMT", "2016-10-01 18:51:24 GMT", "2016-10-01 18:54:11 GMT", "2016-10-01 18:54:21 GMT", "2016-10-01 18:54:32 GMT"))
DEPTH$datetime <- as.POSIXct(as.character(DEPTH$datetime))
Для каждого местоположения глубины я хочу назначить местоположение (широту и долготу) на основе того, когда интерполированная дорожка из фрейма данных местоположения предполагает, что это должно быть, т.е. если места перемещаются из точки A в точку B, в которой точка вдоль этой линии выполняет глубину данные лежат, предполагая одинаковую скорость между точками, учитывая их дату и время.
конечный продукт будет 2 вектора в кадре данных, которые назначают каждое значение глубины с широтой и долготой.
Спасибо.
1 ответ
Предполагая постоянную скорость (равномерную скорость и постоянное направление) между последовательными путевыми точками в GPS
данные, мы можем выполнить линейную интерполяцию отдельно для Lat
а также Lon
с помощью approx
от stats
:
DEPTH$Lat <- approx(x=GPS$datetime, y=GPS$Lat, xout=DEPTH$datetime, method="linear")$y
DEPTH$Lon <- approx(x=GPS$datetime, y=GPS$Lon, xout=DEPTH$datetime, method="linear")$y
В этом использовании интерполированные значения для datetime
в DEPTH
вне диапазона datetime
в GPS
назначены NA
, Увидеть ?approx
для других способов работы с интерполяцией за пределами диапазона ввода.
Используя ваши данные, результат:
print(DEPTH)
## Depth datetime Lat Lon
##1 0.0 2016-10-01 16:22:56 NA NA
##2 0.1 2016-10-01 16:23:06 NA NA
##3 0.0 2016-10-01 16:23:16 NA NA
##4 0.0 2016-10-01 16:23:59 58.65209 -3.178559
##5 0.1 2016-10-01 16:24:52 58.65206 -3.178490
##6 1.5 2016-10-01 16:25:24 58.65204 -3.178448
##7 1.7 2016-10-01 16:32:40 58.65179 -3.177878
##8 1.7 2016-10-01 16:32:51 58.65179 -3.177863
##9 1.4 2016-10-01 18:45:30 NA NA
##10 1.5 2016-10-01 18:45:40 NA NA
##11 1.8 2016-10-01 18:46:54 NA NA
##12 2.1 2016-10-01 18:47:04 NA NA
##13 2.3 2016-10-01 18:47:14 NA NA
##14 1.7 2016-10-01 18:47:25 NA NA
##15 2.0 2016-10-01 18:51:03 NA NA
##16 2.6 2016-10-01 18:51:14 NA NA
##17 2.2 2016-10-01 18:51:24 NA NA
##18 2.1 2016-10-01 18:54:11 NA NA
##19 3.4 2016-10-01 18:54:21 NA NA
##20 3.3 2016-10-01 18:54:32 NA NA