2017-12-13 20 views
0
을 Tibbles을 병합,하지만 무시

내가 full_join 사용하여 다음과 같은 두 가지 tibbles에 합류 해요 :누락 된 값

library(dplyr) 
library(tibble) 

tibble(id=c(1:2, NA), b = c("mouse", "cat", "fish"), c = 6:8) %>% 
full_join(tibble(id=1:3, b = c("mouse", "", "fish"), c = 6:8)) 

이 나에게 줄 것이다 :

A tibble: 5 x 3 
id  b  c 
1 mouse  6 
2 cat  7 
NA fish  8 
2   7 
3 fish  8 

을 이상적으로하지만, 내가 좋아하는 뭔가를 좀하고 싶습니다 그 : 모든 NAS 또는 누락 번째 값보다 "우수"행에 의해 대체되고있다

A tibble: 5 x 3 
id  b  c 
1 mouse  6 
2 cat  7 
3 fish  8 

at에는 자세한 정보가 있습니다. 어떻게해야합니까? 두 tibblesab라고 가정

답변

0

, 우리는 제 NA 될 측값 간주 모든 문자를 대체 할 수있다 (이 경우, ""NA으로 간주된다). 이 작업을 수행하는 빠른 방법은 b[b == ""] <- NA입니다.

그런 다음 full_join이 완료되었음을 알 수 있습니다 (이 경우 열 c). 마지막으로 coalesce 함수를 사용하여 NA을 두 개의 연결된 열로 바꿀 수 있습니다. dat이 최종 출력입니다.

library(dplyr) 
library(tibble) 

# Create example data frame 
a <- tibble(id=c(1:2, NA), b = c("mouse", "cat", "fish"), c = 6:8) 
b <- tibble(id=1:3, b = c("mouse", "", "fish"), c = 6:8) 

# Replace "" with NA 
b[b == ""] <- NA 

# Conduct full_join by c 
dat <- full_join(a, b, by = "c") %>% 
    # Use coalesce to merge column and replace NA 
    mutate(id = coalesce(.$id.x, .$id.y), 
     b = coalesce(.$b.x, .$b.y)) %>% 
    # Select columns 
    select(id, b, c) 

# View the results 
dat 
# # A tibble: 3 x 3 
#  id b   c 
# <int> <chr> <int> 
# 1  1 mouse  6 
# 2  2 cat  7 
# 3  3 fish  8