2016-09-06 1 views
0

나는 데이터 세트 L 모두 완료하지 않은 두 가지 다른 식별자, tickercusipR이 : 나는 왼쪽을 원하는키의 조합에 dataframe에 참여

library(dplyr) 
set.seed(123) 
L = data.frame(ticker = c(1, 2, 3, NA, NA, 6, 7, NA), 
       cusip = c(NA, NA, NA, 4, 5, 6, 7, NA), 
       x = runif(8)) 
R = data.frame(ticker = c(1, 2, 3, 4, 5, 6, 6, 9, 9, 10), 
       cusip = c(1, 2, 3, 4, 5, 6, 6, 9, 9, 10), 
       y = runif(10)) 

> L 
    ticker cusip   x 
1  1 NA 0.2875775 
2  2 NA 0.7883051 
3  3 NA 0.4089769 
4  NA  4 0.8830174 
5  NA  5 0.9404673 
6  6  6 0.0455565 
7  7  7 0.5281055 
8  NA NA 0.8924190 

> R 
    ticker cusip   y 
1  1  1 0.55143501 
2  2  2 0.45661474 
3  3  3 0.95683335 
4  4  4 0.45333416 
5  5  5 0.67757064 
6  6  6 0.57263340 
7  6  6 0.10292468 
8  9  9 0.89982497 
9  9  9 0.24608773 
10  10 10 0.04205953 

R 곳으로 L의 조인 둘 다 또는 키 중 하나만 일치합니다.

이상의 것을 달성하기 위해 더 나은 방법이 있나요 수동으로 모든 열 이름을 변경 결과를 결합하는 첫번째

left_join(L, R, by="ticker") 

left_join(L, R, by="cusip") 

거야? 출력을

> result 
    ticker cusip   x   y 
1  1  NA 0.2875775  0.5514350 
2  2  NA 0.7883051  0.4566147 
3  3  NA 0.4089769  0.9568333 
4  NA  4 0.8830174  0.4533342 
5  NA  5 0.9404673  0.6775706 
6  6  6 0.0455565  0.5726334 
7  6  6 0.0455565  0.1029247 
8  7  7 0.5281055    NA 
9  NA  NA 0.8924190    NA 

편집 (설명) 제공해야

: 조인 규칙 (조금 ... 퀴시 때문에 식별자를 tickercusip는 반드시 동일한

+2

희망 출력을 추가 할 수 있습니까? – r2evans

+1

'ticker'와'cusip'의 값이 실제 데이터와 다른가요? –

+0

@DavidArenburg 예 – luffe

답변

1
L %>% 
    left_join(select(R, ticker, y), by = "ticker") %>% 
    left_join(select(R, cusip, y), by = "cusip") %>% 
    # we now have x, y.x, and y.y 
    gather(ign, y, y.x:y.y) %>% 
    select(-ign) %>% 
    filter(! duplicated(.)) %>% 
    group_by(ticker, cusip, x) %>% 
    filter(n() == 1 | ! is.na(y)) %>% 
# # A tibble: 9 x 4 
# ticker cusip   x   y 
# <dbl> <dbl>  <dbl>  <dbl> 
# 1  1 NA 0.2875775 0.5514350 
# 2  2 NA 0.7883051 0.4566147 
# 3  3 NA 0.4089769 0.9568333 
# 4  6  6 0.0455565 0.5726334 
# 5  6  6 0.0455565 0.1029247 
# 6  7  7 0.5281055  NA 
# 7  NA NA 0.8924190  NA 
# 8  NA  4 0.8830174 0.4533342 
# 9  NA  5 0.9404673 0.6775706 

없습니다 ?), 나는 그것을하는 더 우아한 방법이 될 것이라고 확신하지 않는다. 내가 SO dplyr - 전문가 나를 잘못 증명 :-)