75 votes

Fusionner deux listes en R

J'ai deux listes

first = list(a = 1, b = 2, c = 3)
second = list(a = 2, b = 3, c = 4)

Je veux fusionner ces deux listes pour que le produit final soit

$a
[1] 1 2

$b
[1] 2 3

$c
[1] 3 4

Y a-t-il une fonction simple pour faire cela ?

1voto

csta Points 498

En général, on pourrait,

merge_list <- function(...) by(v<-unlist(c(...)),names(v),base::c)

Notez que la solution by() renvoie une liste attributée, donc elle s'affichera différemment, mais restera une liste. Mais vous pouvez vous débarrasser des attributs avec attr(x,"_nom_attribut_")<-NULL. Vous pouvez probablement aussi utiliser aggregate().

0voto

Nad Pat Points 17

Suite au départ de @Aaron de Stack Overflow et à la réponse de @Theo, les éléments de la liste fusionnée sont sous forme de vecteur c. Mais si vous souhaitez lier des lignes et des colonnes, utilisez rbind et cbind.

merged = map(names(first), ~rbind(first[[.x]], second[[.x]])
merged = set_names(merged, names(first))

0voto

user17980667 Points 1

En utilisant dplyr, j'ai trouvé que cette ligne fonctionne pour les listes nommées utilisant les mêmes noms:

as.list(bind_rows(first, second))

0voto

benson23 Points 779

Nous pouvons faire un lapply avec c(), et utiliser setNames pour assigner le nom d'origine à la sortie.

setNames(lapply(1:length(first), function(x) c(first[[x]], second[[x]])), names(first))

$a
[1] 1 2

$b
[1] 2 3

$c
[1] 3 4

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