如果column2是NA,则在column1上联接,否则在column1和column2上联接

时间:2018-10-10 02:00:00

标签: r dplyr left-join

我确定这个问题已经被问过了,但是我找不到我生命中的答案。我想使用dplyr将两个小标题连接在一起。如果第二列为NA,则只需加入第一列即可。如果第二列不是NA,则连接第一列和第二列。下面的解决方案不起作用,但这是我正在尝试做的事情。

library(tidyverse)
df1 <- tibble(x = c("Name", "City", "City"),  y = c("Table5", "Table1", "Table2"))
df2 <- tibble(x2 = c("Name", "City", "City"), y2 = c(NA, "Table1", "Table2"), z = c("a", "b", "c"))

joined_data <- if (is.na(df2$y2)) {
  df1 %>% 
    left_join(df2, by = c("x" = "x2"))
} else {
  df1 %>% 
    left_join(df2, by = c("x" = "x2", "y" = "y2")) 
}

最终结果应该是

  x     y      z    
  <chr> <chr>  <chr>
1 Name  Table5 a  
2 City  Table1 b    
3 City  Table2 c 

1 个答案:

答案 0 :(得分:2)

我们首先找到所有NA索引,然后将它们加入两个单独的调用中。对于非NA索引,我们在xy上将它们加入,而对于NA索引,我们仅在x上将它们加入,并在y和{{1 }},然后使用y2,然后将这些行绑定在一起。

coalesce