Thanks, Steve. I was thinking that that approach spends too much memory or computational time by making a copy (while I was thinking of editing dt1 in-place). If I'm wrong, maybe that's what I ought to do. If not, I look forward to hearing your other thoughts. --Frank
On Thu, Aug 15, 2013 at 11:23 AM, Steve Lianoglou <[email protected]>wrote: > Hi Frank, > > I don't have time to get into the details of your entire question > right now, but: > > On Thu, Aug 15, 2013 at 8:49 AM, Frank Erickson <[email protected]> wrote: > > Hi, > > > > I really like the DT1[DT2,z:=...] idiom. Unfortunately, the value of a > > merge() on other columns is a new data.table, so modifying DT1, like > > merge(DT1,DT2,by=...)[,z:=...], is not possible. Or is there actually a > way > > to do this that I am missing? > > I just wanted to mention that unless I am misunderstanding what you > want, this is entirely possible, and the way you suggest it might work > is actually the way to do it. > > Consider: > > R> dt1 <- data.table(a=sample(letters[1:2], 5, rep=T), b=runif(5), key='a') > R> dt2 <- data.table(a=c('a', 'b'), c=rnorm(5), key='a') > > R> dt1 > a b > 1: a 0.02517147 > 2: a 0.85459776 > 3: a 0.67472168 > 4: a 0.89684769 > 5: b 0.11619613 > > R> dt2 > a c > 1: a -0.07817539 > 2: b -1.28897689 > > R> out <- merge(dt1, dt2)[, d := b + c] > a b c d > 1: a 0.02517147 -0.07817539 -0.05300392 > 2: a 0.85459776 -0.07817539 0.77642237 > 3: a 0.67472168 -0.07817539 0.59654629 > 4: a 0.89684769 -0.07817539 0.81867230 > 5: b 0.11619613 -1.28897689 -1.17278075 > > Will come back later to look through the rest of your question if > still necessary. > > HTH, > -steve > > -- > Steve Lianoglou > Computational Biologist > Bioinformatics and Computational Biology > Genentech >
_______________________________________________ datatable-help mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
