Comment faire pour joindre plusieurs trames de données à l'aide de dplyr?
Je veux left_join
plusieurs trames de données:
dfs <- list(
df1 = data.frame(a = 1:3, b = c("a", "b", "c")),
df2 = data.frame(c = 4:6, b = c("a", "c", "d")),
df3 = data.frame(d = 7:9, b = c("b", "c", "e"))
)
Reduce(left_join, dfs)
# a b c d
# 1 1 a 4 NA
# 2 2 b NA 7
# 3 3 c 5 8
Cela fonctionne car ils ont tous le même b
colonne, mais Reduce
ne me permet pas de spécifier d'autres arguments que je peux passer à left_join
. Est-il un travail autour de quelque chose comme cela?
dfs <- list(
df1 = data.frame(a = 1:3, b = c("a", "b", "c")),
df2 = data.frame(c = 4:6, d = c("a", "c", "d")),
df3 = data.frame(d = 7:9, b = c("b", "c", "e"))
)
Mise à jour
Ce genre de travaux: Reduce(function(...) left_join(..., by = c("b" = "d")), dfs)
mais quand by
est plus qu'un élément, il donne cette erreur: Error: cannot join on columns 'b' x 'd': index out of bounds
Ne pouvez-vous pas faire
Je n'avais pas pensé à cela. Oui, je peux! N'hésitez pas à écrire comme votre réponse
Hmm, en fait, c'pauses si
Comment voulez-vous que la fonction de savoir qui les colonnes de jointure sur? Ce n'est pas vraiment ce que l' *_join fonctions où conçus pour faire. Si toutes les colonnes ont une commune de la colonne ID, vous pouvez utiliser ensuite votre mise à jour résout le problème. Sinon, vous allez avoir à spécifier à la main les colonnes à utiliser pour la jointure pour chaque paire.
essayez purrr:réduire() à la place?
Reduce(function(...) left_join(..., other args here), dfs)
?Je n'avais pas pensé à cela. Oui, je peux! N'hésitez pas à écrire comme votre réponse
Hmm, en fait, c'pauses si
by
a plus d'un élément. Voir mise à jourComment voulez-vous que la fonction de savoir qui les colonnes de jointure sur? Ce n'est pas vraiment ce que l' *_join fonctions où conçus pour faire. Si toutes les colonnes ont une commune de la colonne ID, vous pouvez utiliser ensuite votre mise à jour résout le problème. Sinon, vous allez avoir à spécifier à la main les colonnes à utiliser pour la jointure pour chaque paire.
essayez purrr:réduire() à la place?
OriginalL'auteur nachocab | 2015-12-17
Vous devez vous connecter pour publier un commentaire.
C'est trop tard je sais....aujourd'hui, j'ai découvert la réponse à des questions. Désolé de déranger.
À l'aide de
left_join()
À l'aide de
merge()
:OriginalL'auteur