library(dplyr)
my_tibble <- tibble(
parentId = character(),
origId = character(),
id = character(),
value = double()
)
original_tibble <- my_tibble %>%
add_row(parentId = "2024Z123", origId = NA, id = "2024Z123", value = 2) %>%
add_row(parentId = "2024Z123", origId = "2024Z123", id = "2024A652", value = 6) %>%
add_row(parentId = "2024A652", origId = "2024Z123", id = "2024X156", value = 5) %>%
add_row(parentId = "2020G001", origId = NA, id = "2020G001", value = 1) %>%
add_row(parentId = "2020G001", origId = "2020G001", id = "2024X156", value = 2) %>%
add_row(parentId = "2021B456", origId = NA, id = "2021B456", value = 3)
final_tibble <- my_tibble %>%
add_row(parentId = "2024A652", origId = "2024Z123", id = "2024X156", value = 5) %>%
add_row(parentId = "2020G001", origId = "2020G001", id = "2024Z156", value = 2) %>%
add_row(parentId = "2021B456", origId = NA, id = "2021B456", value = 3)
O original_tibble contém 3 cadeias. A maneira como a cadeia evolui é a primeira entrada tem parentId = id, e origId = NA e um valor. As entradas id são caracteres e os valores são ints. Então, para cada atualização do valor, uma nova linha com parentId = id da linha de atualização mais recente, origId = o id da primeira entrada, e id = entrada exclusiva para esta nova linha, e a nova entrada de valor. As cadeias também não são necessariamente ordenadas dentro das linhas da maneira que construí a tabela acima, então não posso confiar nisso.
O final_tibble é o resultado que estou procurando. Tentando fazer isso no dplyr, mas qualquer solução serve. O que eu quero é manter a entrada de linha mais recente e eliminar as entradas anteriores da cadeia.
Primeiro, complete uma variável de agrupamento grp combinando parentId e origId e, em seguida, procure por um id que seja único, que seja automaticamente o mais recente.
Observe que, no seu caso, você pode substituir
if_else(...)
porcoalesce(origId, parentId)