根据第二个数据集的日期和时间分配位置值

Assigning location values based on date and time of a second data set

我有 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 个向量,它们为每个深度值分配纬度和经度。

谢谢。

假设 GPS 数据中的连续 way-points 之间速度恒定(匀速 恒定方向),我们可以使用 stats:

中的 approx 分别对 LatLon 执行线性插值
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

在此用法中,DEPTHdatetime 的内插值超出了 GPSdatetime 的范围,并分配了 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