3 votes

Comment puis-je combiner des cadres de données rowise dans une liste ?

Supposons que je dispose des deux listes suivantes. Je veux prendre la première entrée de la liste 2 et combiner ce cadre de données à la liste 1. Je fais cela pour toutes les entrées.

data1 <- data.frame(id = 1:6,                                  
                    x1 = c(5, 1, 4, 9, 1, 2),
                    x2 = c("A", "Y", "G", "F", "G", "Y"))
data2 <- data.frame(id = 4:9,                                  
                    y1 = c(3, 3, 4, 1, 2, 9),
                    y2 = c("a", "x", "a", "x", "a", "x"))
l1 <- list(data1, data2)
l2 <- list(data1, data2)

Le résultat que j'attends est une liste de longueur 2, chaque entrée devant être un cadre de données de 12 lignes et 3 colonnes.

2voto

akrun Points 148302

Nous pouvons utiliser Map con rbind pour lier les éléments data.frame correspondants des deux list s

Map(rbind, l1, l2)

-sortie

[[1]]
   id x1 x2
1   1  5  A
2   2  1  Y
3   3  4  G
4   4  9  F
5   5  1  G
6   6  2  Y
7   1  5  A
8   2  1  Y
9   3  4  G
10  4  9  F
11  5  1  G
12  6  2  Y

[[2]]
   id y1 y2
1   4  3  a
2   5  3  x
3   6  4  a
4   7  1  x
5   8  2  a
6   9  9  x
7   4  3  a
8   5  3  x
9   6  4  a
10  7  1  x
11  8  2  a
12  9  9  x

Ou en utilisant map2 de purrr

library(purrr)
library(dplyr)
map2(l1, l2, bind_rows)

2voto

Paul Smith Points 406

Une autre solution possible, basée sur mapply :

mapply(rbind, l1, l2, SIMPLIFY = F)

#> [[1]]
#>    id x1 x2
#> 1   1  5  A
#> 2   2  1  Y
#> 3   3  4  G
#> 4   4  9  F
#> 5   5  1  G
#> 6   6  2  Y
#> 7   1  5  A
#> 8   2  1  Y
#> 9   3  4  G
#> 10  4  9  F
#> 11  5  1  G
#> 12  6  2  Y
#> 
#> [[2]]
#>    id y1 y2
#> 1   4  3  a
#> 2   5  3  x
#> 3   6  4  a
#> 4   7  1  x
#> 5   8  2  a
#> 6   9  9  x
#> 7   4  3  a
#> 8   5  3  x
#> 9   6  4  a
#> 10  7  1  x
#> 11  8  2  a
#> 12  9  9  x

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