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 dans df1
  • 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 à jour alpha de la colonne, c'est une simple binaire rejoindre. Essayez setkey(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 votre df1 ensemble, i dira data.table pour obtenir des informations de la alpha dans df2. Il est toujours plus sûr de mettre i, 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!

InformationsquelleAutor Puki Luki | 2015-05-21