Criar coluna com vínculo no R

Dúvida interessante que surgiu no t.me/rbrasiloficial:

Como posso fazer para ter um vinculo dos clientes no meu dataframe?

dd_vinculo2 <- dd_vinculo %>% 
  mutate(vinculo= ifelse((mae %in% dd_vinculo$nome | pai %in% dd_vinculo$nome), dd_vinculo$id, "-"))

acho que vc tem duas opções: ou fazer um “verificador de vinculo” e aplicar em todas as linhas ou fazer por join

library(tidyverse)
da <- tibble::tribble(
  ~id, ~nome, ~mae, ~pai,
  1, "Maria", "Neuza", "Ernesto",
  2, "João", "Ana Maria", "Ari",
  3, "Carlos", "Conceição", "Erasmo",
  4, "Eduardo", "Filomena", "Antônio",
  5, "Andre", "Judite", "Manuel",
  6, "Julia", "Ana Maria", "Ari",
  7, "Alice", "Filomena", "Antônio",
  8, "Adriana", "Anastácia", "Renato",
  9, "Leandro", "Rute", "Marcos",
  10, "Raquel", "Judite", "Manuel"
)


# solucao 1
da %>% 
  left_join(select(da, mae, pai, id), c("mae", "pai")) %>% 
  group_by(id.x) %>% 
  filter(n() == 1 | id.x != id.y) %>% 
  ungroup() %>% 
  mutate(vinculo = if_else(id.y == id.x, NA_real_, id.y)) %>% 
  select(id = id.x, mae, pai, vinculo)
#> # A tibble: 10 x 4
#>       id mae       pai     vinculo
#>    <dbl> <chr>     <chr>     <dbl>
#>  1     1 Neuza     Ernesto      NA
#>  2     2 Ana Maria Ari           6
#>  3     3 Conceição Erasmo       NA
#>  4     4 Filomena  Antônio       7
#>  5     5 Judite    Manuel       10
#>  6     6 Ana Maria Ari           2
#>  7     7 Filomena  Antônio       4
#>  8     8 Anastácia Renato       NA
#>  9     9 Rute      Marcos       NA
#> 10    10 Judite    Manuel        5


# solucao 2
verificar_vinculo <- function(id_pesq, mae_pesq, pai_pesq, da) {
  id_vinculo <- da %>%
    filter(id != id_pesq, mae == mae_pesq, pai == pai_pesq) %>%
    pull(id)
  if (length(id_vinculo) == 0) NA_real_ else id_vinculo
}

da %>% 
  rowwise() %>% 
  mutate(vinculo = verificar_vinculo(id, mae, pai, da)) %>% 
  ungroup()
#> # A tibble: 10 x 5
#>       id nome    mae       pai     vinculo
#>    <dbl> <chr>   <chr>     <chr>     <dbl>
#>  1     1 Maria   Neuza     Ernesto      NA
#>  2     2 João    Ana Maria Ari           6
#>  3     3 Carlos  Conceição Erasmo       NA
#>  4     4 Eduardo Filomena  Antônio       7
#>  5     5 Andre   Judite    Manuel       10
#>  6     6 Julia   Ana Maria Ari           2
#>  7     7 Alice   Filomena  Antônio       4
#>  8     8 Adriana Anastácia Renato       NA
#>  9     9 Leandro Rute      Marcos       NA
#> 10    10 Raquel  Judite    Manuel        5

Created on 2020-09-22 by the reprex package (v0.3.0)