'*ply" functionality in R data table

data.table, r

Solution

Edit: Check out the more detailed HTML vignettes available on the project wiki of data.table.

Okay, let me show you a small comparison of `plyr` method using `data.table` to show the equivalence. Maybe that'll help to get you started. But it is important that you read this very nice introduction to data.table AND this FAQ.

set.seed(45) # for reproducibility
# dummy data
m  <- matrix(10*sample(15, 100, replace=T), ncol=10) # 100*10 matrix
df <- data.frame(grp = sample(1:10, 100, replace = T))
df <- cbind(df, as.data.frame(m))

You have a data.frame with 11 columns, 10 data and 1 grouping column. Now, if you'd want to take the mean of each of these columns within each group, then, using `plyr`, you'd do something like:

require(plyr)
ddply(df, .(grp), function(x) colMeans(x[, 2:11]))

Using `data.table`, you can use `.SD` (check this post for a nice explanation of what `.SD` is, in addition to reading the documentation links).

require(data.table)
dt <-data.table(df, key="grp")
dt[, lapply(.SD, mean), by=grp]

This should get you started, I think..?

Problem

I am looking for a way to use the split-apply-combine strategy with R's `data.table` package. ``` library(data.table) # take a data.table object, return integer func <- function(DT) { DT$a * DT$a } DT = data.table( a = 1:50 # ... further fields here b = rep(1:10, 5) ) # this obviously won't work: DT[, result:=func, by=b] # but this will (based on @Aruns answer below) DT[, result:=func(.SD), by=b] ``` While this here is very simple `data.table`, with more complicated structures, I'd like to be able to extract logic into functions and send subsets as `data.table`s to them, without having to enlist all field names.

Original source

Related problems