les données.table de fusionner plusieurs colonnes
Je suis assez nouveau dans la programmation et également à data.table
dans la R - alors peut-être que cette question est très simple, mais j'ai cherché et je ne pouvais pas trouver toutes les solutions.
Je suis en train de match 4 variables deux à deux et ajouter une colonne avec la valeur de la recherche. En base, je ne merge(df1,df2, by.x=c("lsr","ppr"),by.y=c("li","pro"))
, où df1
a 9 cols et df2
(2 lsr
et pro
) df2
a seulement 3, li
, pro
et la "valeur" qui m'intéresse, alpha
.
Cela fonctionne bien, mais comme je commence à être un grand fan de data.table
, je voudrais le faire dans le data.table
- et parce que j'ai des millions de lignes - de sorte que la base de l'opération de fusion est lent (j'ai vu, que la by.x
et by.y
élément est en attente pour data.table
, mais peut-être qu'il y a une solution). Voir quelques exemples de données ci-dessous:
df2:
alpha li pro
1: 0.5000000 0.01666667 0.01666667
2: 0.3295455 0.03333333 0.01666667
3: 0.2435897 0.05000000 0.01666667
4: 0.1917808 0.06666667 0.01666667
5: 0.1571429 0.08333333 0.01666667
df1:
demand rtime mcv mck ppr mlv mlk lsr
1: 0.3 1 357.57700 0.099326944 0.01666667 558.27267 0.155075741 0.01666667
2: 0.3 10 548.75433 0.152431759 0.01666667 614.30667 0.170640741 0.03333333
3: 0.3 11 314.55767 0.087377130 0.01666667 636.48100 0.176800278 0.03333333
4: 0.3 2 312.15033 0.086708426 0.01666667 677.48100 0.188189167 0.06666667
5: 0.3 3 454.47867 0.126244074 0.01666667 608.92067 0.169144630 0.01666667
---
6899196: 0.6 5 537.92673 0.149424093 1.00000000 537.92673 0.149424093 1.00000000
6899197: 0.6 6 277.34732 0.077040923 1.00000000 277.34732 0.077040923 1.00000000
6899198: 0.6 7 73.31484 0.020365235 1.00000000 73.31484 0.020365235 1.00000000
6899199: 0.6 8 32.04197 0.008900546 1.00000000 32.04197 0.008900546 1.00000000
6899200: 0.6 9 14.59008 0.004052799 1.00000000 14.59008 0.004052799 1.00000000
dernière, peut-être d'intérêt est que, dans df2
j'ai des lignes uniques et en df1
, j'ai beaucoup de doublons dans le respect de lsr
et ppr
. J'ai aussi essayé de mettre deux touches et rejoindre la data.table
façon, et l'ajout d'une nouvelle colonne avec alpha
. Mais sans succès. Merci à tous pour votre aide!
- Si vous n'avez pas besoin d'une jointure externe, vous pouvez faire un à gauche, un droit ou rejoindre une jointure interne à l'aide de jointure binaires. La question est celle que vous voulez. Mais à en juger par votre base de R code, il semble que vous wan une jointure interne? Aussi, la colonne que vous souhaitez conserver? Vous aussi vous n'avez pas
pro
colonne dansdf1
- Merci. En fait, je crois que, dans ce cas, l'intérieur et le left join est la même, que toutes les combinaisons de lsr et de ppr, ou de li et pro sont inclus dans les deux df1 et df2. Et n'ayant pas pro dans df1 est une faute de frappe!! Désolé, je voulais dire, ppr en df1, je vais modifier et de les corriger. J'aimerais bien garder toutes les colonnes de df1 et ajouter alpha dans une nouvelle colonne
- Si vous avez besoin d'un left join pour
df1
pendant la mise à jouralpha
de la colonne, c'est une simple binaire rejoindre. Essayezsetkey(df1, lsr, ppr) ; setkey(df2, li, pro) ; df1[df2, alpha := i.alpha] ; df1
- Ha! thats it! Merci beaucoup. Je savais que c'était facile. En fait j'ai essayé cette version, mais je ne savais pas sur le je. Juste un suivi, ce qui est le besoin pour le je. avant d'alpha?
- Donc, si vous avez déjà un
alpha
colonne dans votredf1
ensemble,i
diradata.table
pour obtenir des informations de laalpha
dansdf2
. Il est toujours plus sûr de mettrei,
avant de la colonne des noms sur les RHS afin d'éviter des résultats inattendus. - OK. maintenant, je suis vraiment fan de données.table. Merci!
- Vous avez mon upvote titre de " fellow "grand fan de données.tableau". Ce paquet est de la musique à mes doigts, de la poésie à mes scripts!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la déclaration prévue par David Arenburg en commentaire:
De la actuel devel version 1.9.5, nous pouvons effectuer des jointures directement, sans avoir à définir de clés à l'aide de la
on
argument:Si vous ne souhaitez pas installer la version devel, alors vous pouvez vous attendre qu'il soit poussé comme v1.9.6 sur CRAN.