Comment fusionner deux données.table par différents noms de colonne?
J'ai deux données.tableau X et Y.
colonnes dans X: area, id, value
les colonnes en Y: ID, price, sales
Créer les deux données.tables:
X = data.table(area=c('US', 'UK', 'EU'),
id=c('c001', 'c002', 'c003'),
value=c(100, 200, 300)
)
Y = data.table(ID=c('c001', 'c002', 'c003'),
price=c(500, 200, 400),
sales=c(20, 30, 15)
)
Et j'ai mis les clés pour X et Y:
setkey(X, id)
setkey(Y, ID)
Maintenant, j'essaie de joindre X et Y par id
dans X et ID
dans Y:
merge(X, Y)
merge(X, Y, by=c('id', 'ID'))
merge(X, Y, by.x='id', by.y='ID')
Tous soulevé d'erreur en disant que les noms de colonnes dans la by
argument invalide.
J'ai fait référence au manuel d'utilisation de données.table et a trouvé le merge
fonction ne supportant pas la by.x
et by.y
arguments.
Comment pourrais-je me joindre deux données.les tables par les différents noms de colonne sans changer les noms de colonne?
Ajouter:
J'ai réussi à joindre les deux tables par X[Y]
, mais pourquoi merge
fonction échoue dans les données.de la table?
- Veuillez consulter stackoverflow.com/questions/16047253/... ou stackoverflow.com/questions/27612859/...
- Je vous remercie. J'ai vérifié les deux postes. J'ai réussi à joindre X et Y par
X[Y]
, mais je ne pouvais toujours pas à réaliser qu'il en à l'aide demerge
fonction. Je suis tout à fait confus au sujet de pourquoimerge
échoue dans les données.table. - par.x et par.y sont pas encore mises en œuvre pour les données.des tables. Un FR est déposé. Vérifier stackoverflow.com/questions/14069796/...
- le
by
arguments sont disponibles dansdata.table v1.9.6
sur CRAN de Sep 2015. Voir ma réponse pour l'utiliser.
Vous devez vous connecter pour publier un commentaire.
Utiliser cette opération:
ou de cette opération:
Modifier après avoir édité votre question, j'ai lu l'Article 1.12 du FAQ: "qu'est-Ce que le didifference entre X[Y] et de fusion(X,Y)?", ce qui m'a conduit à la caisse
?merge
et j'ai découvert il y a deux différentes fonctions de fusion en fonction du forfait que vous utilisez. La valeur par défaut estmerge.data.frame
mais les données.table utilisemerge.data.table
. Compareravec
Modifier pour l'exhaustivité basée sur une commentaire par @Michael Bernsteiner, il semble que la
data.table
équipe de planification de la mise en œuvre deby.x
etby.y
dans lemerge.data.table
de la fonction, mais n'a pas encore fait.De
data.table
version 1.9.6 (sur CRAN sur sep 2015), vous pouvez spécifier leby.x
etby.y
arguments endata.table::merge
Cependant, dans les données.tableau 1.9.6 vous pouvez aussi specfy la
on
argument dans leX[Y]
notationcette réponse par le
data.table
auteur a plus de détailsdata.table::merge
jeux desort = TRUE
par défaut, ce qui permettra de définir une clé sur les données qui en résultent. C'est quelque chose à regarder dehors pour si vous n'êtes pas à l'aide des touchesFusion échoue lorsque vous utilisez
by.x
etby.y
avecdata.table
. La prise de vos données:Vous pouvez utiliser
data.table
avec fusion , mais vous devez l'utiliserby
argument en faveur de l'adhésion (donc renommer les colonnes ont la mêmecolnames
)Ce ne sera toujours pas de travail:
Mais cela va fonctionner:
Sinon, vous devez convertir
data.table
àdata.frame
afin d'utilisermerge
avecby.x
etby.y
arguments:library(dplyr); XY <- setDT(left_join(tbl_df(X), tbl_df(Y), by = c("id" = "ID")))
data.table
cette réponse n'est plus correctVous pouvez également fusionner à l'aide de plusieurs colonnes ayant des noms différents. voir l'exemple ci-dessous