繁体   English   中英

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

[英]If column2 is NA join on column1 else join on column1 and column2

我敢肯定这个问题已经被问过了,但是我找不到我生命中的答案。 我想使用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 

我们首先找到所有NA索引,然后将它们加入两个单独的调用中。 对于非NA索引,我们将它们连接到xy对于NA索引,我们将它们仅连接到x ,并使用coalesce选择yy2之间的非NA值,然后将行绑定在一起。

library(tidyverse)
NAinds <- is.na(df2$y2)

df1[!NAinds,] %>%
   left_join(df2, by = c("x" = "x2", "y" = "y2")) %>%
   bind_rows(df1[NAinds, ]  %>%
                 left_join(df2,  by = c("x" = "x2")) %>%
                 mutate(y = coalesce(y, y2)) %>%
                 select(-y2))


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM