[英]tidyverse alternative to left_join & rows_update when two data frames differ in columns and rows
我在这里可能缺少一个 *_join 版本,但我有两个数据框,其中
条件 #1 和 #2 使left_join
失败。 条件 #3 使rows_update
失败。 所以我需要在两者之间做一些步骤,我想知道是否有更简单的解决方案来获得所需的 output。
x <- data.frame(id = c(1, 2, 3),
a = c("A", "B", NA))
id a
1 1 A
2 2 B
3 3 <NA>
y <- data.frame(id = c(1, 2, 3, 4),
a = c("A", "B", "C", "D"),
q = c("u", "v", "w", "x"))
id a q
1 1 A u
2 2 B v
3 3 C w
4 4 D x
并且所需的 output 将是:
id a q
1 1 A u
2 2 B v
3 3 C w
我知道我可以使用以下代码来实现这一点,但对我来说它看起来不必要地复杂。 那么是否有更直接的方法而不必在下面的两个命令中执行中间管道?
library(tidyverse)
x %>%
left_join(., y %>% select(id, q), by = c("id")) %>%
rows_update(., y %>% filter(id %in% x$id), by = "id")
您可以left_join
并使用coalesce
替换缺失值。
library(dplyr)
x %>%
left_join(y, by = 'id') %>%
transmute(id, a = coalesce(a.x, a.y), q)
# id a q
#1 1 A u
#2 2 B v
#3 3 C w
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.