Предположим, у меня есть два следующих набора данных:
library(tidyverse)
iris1 <- iris %>%
as_tibble() %>%
mutate(id = row_number(),
Petal.Length = ifelse(id > 75, NA, Petal.Length),
Petal.Width = ifelse(id > 75, NA, Petal.Width))
iris2 <- iris %>%
as_tibble() %>%
mutate(id = row_number()) %>%
filter(id > 75) %>%
select(id, Petal.Length, Petal.Width)
Здесь я установил iris2
как данные, отсутствующие в iris1
.Я хотел бы объединить данные в iris2
обратно в iris1
, используя id
в качестве ключа.Я мог бы использовать dplyr::full_join
и присоединиться к id
, но я бы дублировал переменные Petal.Length
и Petal.Width
, когда на самом деле я хочу, чтобы значения в iris2
были интегрированы в соответствующие им переменные в iris1
.
Есть ли более элегантное решение, чем приведенное ниже?Пример здесь с 2 переменными (Petal.Length
и Petal.Width
), но в моем фактическом наборе данных это влияет на сотню переменных, и я должен был бы думать, что есть лучший способ, чем с помощью ручного труда.
left_join(iris1, iris2, by = "id") %>%
mutate(Petal.Length = ifelse(is.na(Petal.Length.x), Petal.Length.y, Petal.Length.x),
Petal.Width = ifelse(is.na(Petal.Width.x), Petal.Width.y, Petal.Width.x)) %>%
select(-Petal.Length.x, -Petal.Length.y, -Petal.Width.x, -Petal.Width.y)