Рассмотрим следующий сценарий:
test <- data.frame(Id1 = c(1, 2, 3, 4, 5, 10, 11),
Id2 = c(3, 4, 10, 11, 12, 15, 9),
Type = c(1, 1, 1, 2, 2, 2, 1) )
test
#> Id1 Id2 Type
#> 1 1 3 1
#> 2 2 4 1
#> 3 3 10 1
#> 4 4 11 2
#> 5 5 12 2
#> 6 10 15 2
#> 7 11 9 1
Я хочу присоединить test
к себе Id2 = Id1
только тогда, когда Type
имеет определенное значение, например, Type == 1
таким образом, что яполучить следующий результат:
#> Id1 Id2 Type.x Id2.y Type.y
#> 1 1 3 1 10 1 # matches row 3
#> 2 2 4 1 11 2 # matches row 4
#> 3 3 10 1 15 2 # matches row 6
#> 4 4 11 2 NA NA # matches row 7 but Type != 1
#> 5 5 12 2 NA NA # Type !=1
#> 6 10 15 2 NA NA # Type !=1
#> 7 11 9 1 NA NA # Type == 1 but no matches
Так как в этом случае test
представляет иерархию, объединение этого типа позволило бы мне «развернуть» иерархию так, чтобы каждая строка в конечном итоге заканчивалась на Id2
это не было равно любому значению Id1
.
Как можно достичь такого соединения?