【问题标题】:R::dplyr combine tibbles on matching columns and replace NA values [duplicate]R::dplyr 在匹配列上组合小标题并替换 NA 值 [重复]
【发布时间】:2021-09-28 17:24:34
【问题描述】:

我有两个小标题 xy 我希望将它们合并到 out 中,以便 x 中的 NA 列被 y 中的匹配列替换

library(tidyverse)
x <- tibble(name = c("hans", "dieter", "bohlen", "alf"), 
        location = c('NA','NA',1,2), 
        val1 = 1:4)
y <- tibble(name = c("hans", "dieter"), 
        location = c(2,2), 
        val1 = 1:2)

x
y

我想要的输出:

out <- tibble(name = c("hans", "dieter", "bohlen", "alf"), 
    location = c(2,2,1,2), 
    val1 = 1:4)
out

但使用 left_join 或类似函数不会覆盖 X 中的 NA 值。我无法从这个问题 Overwrite left_join dplyr to update data 中找到解决方案

附言我似乎无法打印要打印的变量 - 有关如何格式化代码以执行此操作的任何帮助? 非常感谢!

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    在执行left_join 之后,我们可以coalesce 'location' 列

    library(dplyr)
    x %>% 
       left_join(y %>%
              select(-val1), by = 'name') %>% 
        transmute(name, location = coalesce(as.numeric(location.x), location.y), val1)
    

    -输出

    # A tibble: 4 × 3
      name   location  val1
      <chr>     <dbl> <int>
    1 hans          2     1
    2 dieter        2     2
    3 bohlen        1     3
    4 alf           2     4
    

    【讨论】:

    • 谢谢! Quick q - 你在 stackoverflow 代码中写了什么来让输出 tibble 完整打印出来?
    • @CocoNewton 它只是一个left_join,然后合并从位置创建的 .x、.y 列,这样如果 .x 中有 NA,它将被相应的 .y 值替换
    【解决方案2】:
    library(tidyverse)
    x <- tibble(name = c("hans", "dieter", "bohlen", "alf"), 
                location = c(NA,NA,1,2), 
                val1 = 1:4)
    y <- tibble(name = c("hans", "dieter"), 
                location = c(2,2), 
                val1 = 1:2)
    
    
    out <- tibble(name = c("hans", "dieter", "bohlen", "alf"), 
                  location = c(2,2,1,2), 
                  val1 = 1:4)
    
    rows_update(x = x, y = y, by = "name")
    #> # A tibble: 4 x 3
    #>   name   location  val1
    #>   <chr>     <dbl> <int>
    #> 1 hans          2     1
    #> 2 dieter        2     2
    #> 3 bohlen        1     3
    #> 4 alf           2     4
    

    reprex package (v2.0.1) 于 2021 年 9 月 28 日创建

    【讨论】:

    • 完美,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2023-04-02
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多