R 根据距离和时间选择值
我想根据以下空间和时间条件匹配两个表的值:R 根据距离和时间选择值,r,data.table,R,Data.table,我想根据以下空间和时间条件匹配两个表的值: 两小时时间间隔 最小距离,最大距离20公里 我可以使用for循环来解决这个问题,但是由于表的维度是300万*10万*13,所以需要很长时间才能完成 你有什么建议吗?我在下面贴了一个实际的例子和期望的输出。多谢各位 示例 DT1 <- data.table( Date = as.POSIXct(c("2005-01-05 10:40:00", "2005-01-06 10:40:00", "2005-01-07 10:40:00", "2005
- 两小时时间间隔
- 最小距离,最大距离20公里
DT1 <- data.table(
Date = as.POSIXct(c("2005-01-05 10:40:00", "2005-01-06 10:40:00", "2005-01-07 10:40:00", "2005-01-08 10:40:00", "2005-01-09 10:40:00", "2005-01-10 10:40:00"), format = "%Y-%m-%d %T", tz = "GMT"),
Lat = c(rep(50, 3), 35.44, 25.44, 15.44),
Lon = c(rep(-50, 3), -10.44, -20.44, -30.44),
Other.col = sample(LETTERS, 6))
DT2 <- data.table(
Date = as.POSIXct(c("2011-01-01 10:40:00", "2005-01-05 11:40:00", "2005-01-09 08:59:00", "2005-01-09 09:18:00", "2005-01-10 08:59:00"), format = "%Y-%m-%d %T", tz = "GMT"),
Lat = c(35.44, 1, 25.54, 25.43, 15.46),
Lon = c(-10.44, 1, -20.66, -20.42, -30.13),
Quality = c("h", "f", "n", "z", "l"))
DT1
Date Lat Lon Other.col
1: 2005-01-05 10:40:00 50.00 -50.00 E
2: 2005-01-06 10:40:00 50.00 -50.00 C
3: 2005-01-07 10:40:00 50.00 -50.00 O
4: 2005-01-08 10:40:00 35.44 -10.44 Z
5: 2005-01-09 10:40:00 25.44 -20.44 T
6: 2005-01-10 10:40:00 15.44 -30.44 S
DT2
Date Lat Lon Quality
1: 2011-01-01 10:40:00 35.44 -10.44 h
2: 2005-01-05 11:40:00 1.00 1.00 f
3: 2005-01-09 08:59:00 25.54 -20.66 n
4: 2005-01-09 09:18:00 25.43 -20.42 z
5: 2005-01-10 08:59:00 15.46 -30.13 l
Output
Date Lat Lon Other.col V2
1: 2005-01-05 10:40:00 50.00 -50.00 E NA
2: 2005-01-06 10:40:00 50.00 -50.00 C NA
3: 2005-01-07 10:40:00 50.00 -50.00 O NA
4: 2005-01-08 10:40:00 35.44 -10.44 Z NA
5: 2005-01-09 10:40:00 25.44 -20.44 T z
6: 2005-01-10 10:40:00 15.44 -30.44 S l
DT1对于您的具体示例,您可以执行DT1[DT2,V2:=i.Quality,on=c(Date=“Date”),roll=-2*60*60]
但我不太清楚“2小时”的间隔,它是否意味着两种方式?此外,距离部分将更加困难,因为你需要为每场比赛运行一个复杂的公式。我想你可以先解出2小时的时间间隔,然后用矢量化的方法在子集上运行公式。但就目前而言,你的例子似乎过于简化了。例如,如果DT2
中的两个值满足DT1
中相同值的条件,会发生什么情况?两个小时的间隔实际上是双向的。如果DT2
中的两个值满足DT1
中的条件,则选择最近的点。对于您的具体示例,您可以执行DT1[DT2,V2:=i.Quality,on=c(Date=“Date”),roll=-2*60*60]
但我不太清楚“2小时”间隔,它是否意味着两种方式?此外,距离部分将更加困难,因为你需要为每场比赛运行一个复杂的公式。我想你可以先解出2小时的时间间隔,然后用矢量化的方法在子集上运行公式。但就目前而言,你的例子似乎过于简化了。例如,如果DT2
中的两个值满足DT1
中相同值的条件,会发生什么情况?两个小时的间隔实际上是双向的。如果DT2
中的两个值满足DT1
中的条件,则选择最近的点。