![](/img/trans.png)
[英]Error: Join columns must be present in data. x Problem with `column1` and `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索引,我们将它们连接到x
和y
对于NA索引,我们将它们仅连接到x
,并使用coalesce
选择y
和y2
之间的非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.