R 合并TIBLES,但覆盖缺少的值

R 合并TIBLES,但覆盖缺少的值,r,join,merge,na,tibble,R,Join,Merge,Na,Tibble,我正在使用full_join连接以下两个tibble: 这将给我: A tibble: 5 x 3 id b c 1 mouse 6 2 cat 7 NA fish 8 2 7 3 fish 8 理想情况下,我想得到这样的东西: A tibble: 5 x 3 id b c 1 mouse 6 2 cat 7 3 fish 8 所有NAs或缺少的值都被具

我正在使用full_join连接以下两个tibble:

这将给我:

A tibble: 5 x 3
 id     b     c
 1 mouse     6
 2   cat     7
NA  fish     8
 2           7
 3  fish     8
理想情况下,我想得到这样的东西:

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

所有NAs或缺少的值都被具有更多信息的更高级行替换。我该怎么做呢?

假设这两个TIBLE分别称为a和b,我们可以首先将任何被视为缺失值的字符替换为NA,在这种情况下,被视为NA。关于您的具体示例,我认为您的问题是如何组合两个tibble,而每个tibble都有不同的行。在执行完全联接之前,您可以使用filter\u all稍微清除数据

所以它意味着为所有变量选择满足两个条件的行:is not NA和

tb1 <- tibble(id=c(1:2, NA), b = c("mouse", "cat", "fish"), c = 6:8) 
tb1 <- tb1%>% filter_all(all_vars((!is.na(.))&(.!="")))
> tb1
# A tibble: 3 x 3
   id    b         c
  <int> <chr> <int>
1     1 mouse     6
2     2 cat       7
我们可以用我包裹里的保险箱,然后用 合并以处理列冲突

# devtools::install_github("moodymudskipper/safejoin")
library(safejoin)

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)
解决方案:

b[b==""] <- NA
safe_left_join(a, b, by = "c", conflict = coalesce)
# # A tibble: 3 x 3
#      id b         c
#   <int> <chr> <int>
# 1     1 mouse     6
# 2     2 cat       7
# 3     3 fish      8
tb1 <- tibble(id=c(1:2, NA), b = c("mouse", "cat", "fish"), c = 6:8) 
tb1 <- tb1%>% filter_all(all_vars((!is.na(.))&(.!="")))
> tb1
# A tibble: 3 x 3
   id    b         c
  <int> <chr> <int>
1     1 mouse     6
2     2 cat       7
tb2 <- tibble(id=1:3, b = c("mouse", "", "fish"), c = 6:8)
tb2 <- tb2 %>% filter_all(all_vars((!is.na(.))&(.!="")))
full_join(tb1,tb2)
Joining, by = c("id", "b", "c")
# A tibble: 3 x 3
     id b         c
  <int> <chr> <int>
1     1 mouse     6
2     2 cat       7
3     3 fish      8
# devtools::install_github("moodymudskipper/safejoin")
library(safejoin)

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)
b[b==""] <- NA
safe_left_join(a, b, by = "c", conflict = coalesce)
# # A tibble: 3 x 3
#      id b         c
#   <int> <chr> <int>
# 1     1 mouse     6
# 2     2 cat       7
# 3     3 fish      8