Un exemple concret
Voici un exemple que Hadley a pu avoir en tête. Imaginez, nous avons un liste de ces cadres de données :
library(dplyr)
library(purrr)
df1=data.frame(a = runif(10),b = runif(10),a_0 = c(1,2,2,5,3,1,2,2,5,3))
df2=data.frame(a = runif(5),c = runif(5),b_0 = c(4,1,4,1,4))
df3=data.frame(c = runif(3),d = runif(3),a = runif(3),c_0 = c(5,1,2))
df4=data.frame(b = runif(5),a = runif(5),e = runif(5),d_0 = c(5,1,5,3,1))
lst = list(df1,df2,df3,df4)
Maintenant, nous voulons réduire ces cadres de données en les joignant à gauche deux par deux, ce qui est no sur la base d'une ou plusieurs colonnes communes ; dans notre cas, cela aurait été la colonne a
. Au lieu de cela, nous nous intéressons à la jonction gauche des cadres de données sur la base de paires données présentées dans le tableau suivant by_list
:
by_list=list(c("a_0"="b_0"),c("a_0"="c_0"),c("a_0"="d_0"))
Quand nous appelons reduce2()
nous obtenons le résultat suivant :
reduce2(lst,by_list,left_join)
Nous pouvons observer ici que cela produit une liste avec toutes les lignes de forme longue à partir des éléments communs présents dans la colonne a_0
de df1
et ses paires correspondantes dans d'autres trames de données. Note également que les suffixes de a.x
, a.y
, a.x.x
, a.y.y
par exemple, indiquer/séparer les colonnes de même nom des opérations de jointure imbriquées qui n'étaient pas utilisé pour toute opération de jointure.