3 votes

Joindre des cadres de données en utilisant reduce2() dans R

Voici un lien qui introduit l'utilisation de reduce2() .

Hadley a présenté l'exemple,

vous pouvez avoir une liste de cadres de données que vous voulez joindre ensemble, et les variables que vous utilisez pour joindre varieront d'un élément à l'autre.

Je n'arrive pas à imaginer la situation.

J'ai compris le reduce2() parce que j'ai compris l'exemple dans un lien

x <- list(c(0, 1), c(2, 3), c(4, 5))
y <- list(c(6, 7), c(8, 9))
reduce2(x, y, paste)
#> [1] "0 2 6 4 8" "1 3 7 5 9"

Mais l'exemple décrit par Hadley est difficile à imaginer pour moi.

Quelqu'un peut-il décrire cet exemple ?

2voto

Vitali Avagyan Points 1059

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)

The Output of the Function Call

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X