Мне нужно объединить два data.frame
в R
, и у обоих из них есть два кандидата id, но много недостающих данных (поэтому я не могу просто выбрать один и отфильтровать остальные).
ИЗМЕНИТЬ воспроизводимый пример обоих наборов данных и желаемого результата:
messy1 <- data.frame(id1 = c(11, NA, 13, 11, 12, NA), id2 = c(NA, 22, 23, 21, NA, 23), time = rep(1:2, each = 3))
messy2 <- data.frame(id1 = c(12, NA, 14, 14), id2 = c(22, 23, 24, NA), time = c(1, 1, 1, 2))
desired1 <- data.frame(id1 = rep(11:13, 2), id2 = rep(21:23, 2), time = rep(1:2, each = 3)) # 12/22 is only available in messy2
desired2 <- data.frame(id1 = c(12:13, 14, 14), id2 = c(22:23, 24, 24), time = c(rep(1, 3), 2)) # 13/23 is only available in messy1
desired_joined <- full_join(desired1, desired2)
> messy1
id1 id2 time
1 11 NA 1
2 NA 22 1
3 13 23 1
4 11 21 2
5 12 NA 2
6 NA 23 2
> messy2
id1 id2 time
1 12 22 1
2 NA 23 1
3 14 24 1
4 14 NA 2
> desired_joined
id1 id2 time
1 11 21 1
2 12 22 1
3 13 23 1
4 11 21 2
5 12 22 2
6 13 23 2
7 14 24 1
8 14 24 2
ПОСЛЕДНИЕ РЕДАКТИРОВАНИЯ
приведенный выше пример теперь точно отражает проблему, которую я пытался решить. После выяснения этого комментарий, предоставленный @Ben, является фактическим решением.
Устаревшие части вопроса были удалены, чтобы не сбивать с толку тех, кто столкнется с этим в будущем.
fill
изtidyr
— вы можетеgroup_by
id1
иfill
наid2
(и наоборот). - person Ben   schedule 09.05.2021