在R测试中,如果案例在时间范围内且具有唯一ID
我有两个带信息的数据帧 第一个是最大的,包含许多行,用于曲线中唯一的速度测量。所以它有一列带有curveID,一个测量日期时间,还有很多列带有其他速度和曲线信息 第二个是一个小型数据库,包含已知的道路工程。它包含三列:curveID、from和to。curveID与第一个数据库具有相同的系数,from是一个日期时间(POSIXct)是该路段道路工程的开始道路工程,to是一个包含道路工程结束的日期时间(POSIXct) 相当简化的数据库如下所示:在R测试中,如果案例在时间范围内且具有唯一ID,r,date,range,R,Date,Range,我有两个带信息的数据帧 第一个是最大的,包含许多行,用于曲线中唯一的速度测量。所以它有一列带有curveID,一个测量日期时间,还有很多列带有其他速度和曲线信息 第二个是一个小型数据库,包含已知的道路工程。它包含三列:curveID、from和to。curveID与第一个数据库具有相同的系数,from是一个日期时间(POSIXct)是该路段道路工程的开始道路工程,to是一个包含道路工程结束的日期时间(POSIXct) 相当简化的数据库如下所示: speedmeasurements <- d
speedmeasurements <- data.frame("curve_id" = c(1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3), "datetime" = c(0, 2, 8, 9, 1, 2, 3, 4, 5, 1, 3, 5))
roadworks <- data.frame("curve_id" = c(1, 1, 3), "from" = c(1, 5, 2), "to" = c(3, 7, 4))
speedmeasurements由于您希望使用bycurve\u id
进行操作,因此建议执行联接操作。不幸的是,基本R的merge
和dplyr
的*\u join
函数不会产生不相等的结果,因此您只能通过curve\u id
进行拆分,对每个函数进行一些手动操作,然后重新绑定它们
data.table
允许直接进行“等”联接(在一个范围内联接)
首先,我将在“道路工程”列中添加内容,以便我们从连接中看到一些东西
库(data.table)
setDT(速度测量)
环境运输及运输局局长(道路工程)
道路工程[,道路工程:=正确]
道路工程
#从公路到道路工程的曲线id
#1:13对
#2:15 7对
#3:324对
现在是合并:
roadworks[速度测量,on=(曲线id,from=日期时间)]
#从公路到道路工程的曲线id
#1:100 NA
#2:12对
#3:18 NA
#4:19 NA
#5:21 NA
#6:2 NA
#7:23 NA
#8:24NA
#9:25NA
#10:31 NA
#11:3对
#12:35 NA
这其中有几点:
data.table
的合并前提是A[B,on=.(…)]
实际上是“B左加入A”(参见和)李>
- 它保留的是
A
中的联接列名,而不是B
,因此我们将要重命名它们
- 那些不匹配的行将获得预期的
NA
带清理的完整代码:
speed2%
[道路工程:=!is.na(道路工程)]
(请注意,data.table
有一个长期存在的错误,如果最后一个操作是:=
赋值,请参阅)感谢您的冗长回答!但是from=datetime
在POSIXct上工作得好吗?我在运行第一行后才得到na。我使用感谢您的确认。我正在调查,但还没找到。也许是时区问题…我一直在关注日期时间,但我的错误是在曲线上。。。你的解决方案很有魅力!
speedmeasurements <- data.frame("curve_id" = c(1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3), "datetime" = c(0, 2, 8, 9, 1, 2, 3, 4, 5, 1, 3, 5), "roadworks" = c(F, T, F, F, F, F, F, F, F, F, T, F))