【发布时间】:2019-03-14 20:28:58
【问题描述】:
我确信这个问题以前被问过,但我一生都找不到答案。我想使用 dplyr 将两个 tibbles 连接在一起。如果第二列是 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
【问题讨论】:
-
我认为您需要使用
any即if(any(is.na(df2$y2))进行包装。顺便说一句,当您仅通过“x”列加入时,如果数据集“x”都有重复元素,则会导致重复行