這個問題納入匹配時間限制是後續到以前的問題:Click與data.table
在這個問題上提供了兩個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)
在上一問題找到了解決辦法,這一問題:我們的目標是通過匹配上Track1
和Loc
從MATCHINGS
最近最少ID
放入INVOLVED
。一個額外的條件是匹配INVOLVED
條目的Time
可能不會高於MATCHING
條目的Time
。這與當前的方法來實現(見下文)
一個新的約束條件是:所述INVOLVED
條目的Time
可能不超過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
由於INVOLVED
條目的時間比MATCHINGS
條目上Track4
和匹配低超過30秒Loc
。我沒有看到如何將其納入我目前的解決方案。根據Matthew Dowle的說法,data.table包中的功能請求與此問題有關,但它應該已經可以成立。有誰知道如何?
目前的方法(如果不花時間約束考慮在內)
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]
不,它可能不會超過30秒。因此,「參與」和「匹配」條目的「時間」之間的差異可能不超過30秒(如此30秒或更少),而「參與」條目的「時間」可能不會高於「時間」 「MATCHINGS」條目。這最後一點已經合併。 –
已更新回答,以突出顯示有限回滾/轉發功能(很久以前實現)以及'on ='參數(在v1.9.6中實現)。請檢查並接受它是否解決了您的問題,以便Q保持解答。謝謝。 – Arun