这个问题是上一个问题的后续问题:点击
在这个问题中,提供了两个 data.frames,因为这个问题侧重于更具体的部分,所以示例数据被减少了。
tc <- textConnection('
ID Track4 Time Loc
4 50 40 1
5 55 50 1
6 55 60 1
')
MATCHINGS <- read.table(tc, header=TRUE)
tc <- textConnection('
ID Track4 Time Loc
"" 50 40 1
"" 55 10 1
"" 55 40 1
"" 55 59 1 ')
INVOLVED <- read.table(tc, header=TRUE)
在上一个问题中找到了解决此问题的方法:目标是通过匹配和将最近ID
的 fromMATCHINGS
放入。一个额外的条件是匹配条目的 可能不高于中的条目。这是通过当前方法实现的(见下文)INVOLVED
Track1
Loc
Time
INVOLVED
Time
MATCHING
一个新的约束是:条目Time
的INVOLVED
时间不能比条目低超过 30 秒(Time
列以秒为单位)MATCHINGS
。现在实现了以下输出:
ID Track4 Time Loc
4 50 40 1
5 55 10 1
5 55 40 1
6 55 59 1
然而,预期的结果是:
ID Track4 Time Loc
4 50 40 1
"" 55 10 1
5 55 40 1
6 55 59 1
由于该条目的 Time比匹配和INVOLVED
的条目低 30 秒以上。我不知道如何将其合并到我当前的解决方案中。根据 Matthew Dowle 的说法,de data.table 包中的功能请求与此问题有关,但应该已经可以合并。有谁知道怎么做?MATCHINGS
Track4
Loc
当前方法(不考虑时间限制)
M = as.data.table(MATCHINGS)
I = as.data.table(INVOLVED)
M[,Time:=-Time]
I[,Time:=-Time]
setkey(M,Loc,Track4,Time)
I[,ID:={i=list(Loc,Track4,Time);M[i,ID,roll=TRUE,mult="first"]}][,Time:=-Time]