Note : Cette question a été fermée en tant que "doublon". Les solutions proposées ici y ici n'a pas répondu à ma question. Ils ont montré comment fusionner lorsqu'une entrée unique se situe dans une plage, j'essaie d'identifier les plages qui se chevauchent et de les joindre. Mon titre aurait peut-être pu être meilleur...
J'ai un ensemble de données principal main_df
avec une heure de début et de fin (en secondes). Je voudrais voir si la plage de temps en main_df
se situe dans une liste de plages dans lookup_df
et, si c'est le cas, récupérer la valeur dans lookup_df
. En outre, si le main_df
se situe dans deux plages de recherche différentes, dupliquez la ligne pour que chaque valeur soit représentée. ***
main_df <- tibble(start = c(30,124,161),
end = c(80,152,185))
lookup_df <- tibble(start = c(34,73,126,141,174,221),
end = c(69,123,136,157,189,267),
value = c('a','b','b','b','b','a'))
# Do something here to get the following:
> final_df
# A tibble: 4 x 4
start end value notes
<dbl> <dbl> <chr> <chr>
1 30 80 a ""
2 30 80 b "Duplicate because it falls within a and b"
3 124 152 b "Falls within two lookups but both are b"
4 161 185 b ""
***En regardant la façon dont j'ai structuré le problème...
#Not actual code
left_join(main_df, lookup_df, by(some_range_join_function) %>%
add_rows(through_some_means)
Plutôt que d'ajouter une nouvelle ligne, je pourrais inverser la façon dont je les joins...
semi_join(lookup_df, main_df, by(some_range_join_function))