R 合并TIBLES,但覆盖缺少的值
我正在使用full_join连接以下两个tibble: 这将给我: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或缺少的值都被具
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