2017-04-21 1 views
1

안녕하세요 전 롤 조인 솔루션이 테이블의 중복 항목과 관련하여 특별히 이해되는지 잘 모르겠습니다. 나는 경기가 data.old 'D'의 경우를 제외하고 제대로 작동하려면 무엇입니까여러 일치에서 롤링 조인

     date data.new data.old 
1: 2015-03-02 12:20:00 sample1  d 
2: 2016-03-02 12:20:00 sample3  a 
3: 2016-03-07 12:20:00 sample3  b 
4: 2016-04-02 12:20:00 sample3  c 

: 같은

new <- data.table(date = as.POSIXct(c("2016-03-01 12:20:00", "2016-03-01 12:20:00", "2016-04-02 12:20:00")), data.new = c("sample1","sample2","sample3")) 
new 
old <- data.table(date = as.POSIXct(c("2016-03-02 12:20:00", "2016-03-07 12:20:00", "2016-04-02 12:20:00", "2015-03-02 12:20:00")), data.old = c("a","b","c","d")) 
old 
setkey(new, date) 
setkey(old, date) 
new[old,roll=-Inf] 

출력은 같습니다 여기

은 샘플 데이터입니다. 새로운 테이블 유사한 처음 두 개의 타임 스탬프를 갖기 때문에 는, 롤 "sample2를"

     date data.new data.old 
    new: 2015-03-02 12:20:00 sample2  d 
    1: 2015-03-02 12:20:00 sample1  d 
    2: 2016-03-02 12:20:00 sample3  a 
    3: 2016-03-07 12:20:00 sample3  b 
    4: 2016-04-02 12:20:00 sample3  c 

같은 data.new 컬럼 최초로 출현에 이상적으로는 data.old "D"에 대한 중복 된 행을 원 매핑 단지 수 모든 지침을 부탁드립니다.

답변

1

사용 : 솔루션에 대한

   x.date data.new data.old 
1: 2015-03-02 12:20:00 sample1  d 
2: 2015-03-02 12:20:00 sample2  d 
3: 2016-04-02 12:20:00 sample3  c 
4: 2016-03-02 12:20:00 sample3  a 
5: 2016-03-07 12:20:00 sample3  b 
+0

감사합니다 .. 내가 가입 압연 듯이 가장 가까운 타임 스탬프 경기에서 찾고 있어요, 그래서 난 그냥 그것을 일치시킬 :

on <- old[new, roll = Inf, .(x.date, data.new, data.old)] no <- new[old, roll = -Inf] unique(rbindlist(list(on, no))) 

준다 가장 가까운 타임 스탬프가 있고 가장 가까운 타임 스탬프가 여러 개있는 경우이 경우 행을 복제하려고합니다 (그래서 "sample 1"과 "sample 2"가 가장 가까우므로 "d"에 대해 두 행을 원합니다). 비 동등 조인을 사용하여 나는 당신의 솔루션 케이스에서 모든 큰 것들에 조인하고있는 타임 스탬프보다 크거나 작은 모든 타임 스탬프를 얻습니다. – PSraj

+0

@PSraj 업데이트를 참조하십시오. HTH – Jaap

+0

감사합니다.이 기능은 참으로 매력적입니다. – PSraj