<div dir="ltr">Hi Marc,<div><br></div><div>I think the set function is a good fit:</div><div><br></div><div><div>for (j0 in varnames) set(dt,j=paste0(j0,'_mean'),value=wtd.mean(dt[[j0]],dt[[3]]))</div></div><div><br></div><div>I guess this is significantly more efficient than nested ['s and .SD's if your data is large. If your data.table is really big, though, maybe you want to assign the weighted means elsewhere...? They're just scalars, so you probably don't need them filling out a vector of the data table.</div><div><br></div><div>--Frank</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 10, 2015 at 1:58 PM, Marc Halperin <span dir="ltr"><<a href="mailto:Halperin@outins.com" target="_blank">Halperin@outins.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I want to add new columns to a data.table that is the weighted average of the columns and a weight variable.  This is a general problem I run into when using .SDcols but also needing another variable from the data.table to be available within the function within lapply.  Without including that variable within .SDcols (in this case the weight variable), I don't have access to it in the lapply function argument.   Is it a bad idea to subset .SD how I've done it?<br>
<br>
library(data.table)<br>
library(Hmisc)<br>
<br>
dt <- data.table(a=runif(10), b= runif(10), weight=runif(10))<br>
<br>
varnames <- c("a","b")<br>
<br>
dt[ , ( paste( "mean", varnames, sep = "_" ) ) := lapply( .SD[ , .SD, .SDcols = -"weight" ], wtd.mean, weight ), .SDcols = c("weight",varnames) ]<br>
<br>
Thanks<br>
<br>
-Marc<br>
_______________________________________________<br>
datatable-help mailing list<br>
<a href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a><br>
<a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a><br>
</blockquote></div><br></div>