For each subset of a data frame, apply function then combine results into a
list. dlply
is similar to by
except that the results
are returned in a different format.
To apply a function for each row, use alply
with
.margins
set to 1
.
dlply(.data, .variables, .fun = NULL, ..., .progress = "none", .inform = FALSE, .drop = TRUE, .parallel = FALSE, .paropts = NULL)
.data | data frame to be processed |
---|---|
.variables | variables to split data frame by, as |
.fun | function to apply to each piece |
... | other arguments passed on to |
.progress | name of the progress bar to use, see
|
.inform | produce informative error messages? This is turned off by default because it substantially slows processing speed, but is very useful for debugging |
.drop | should combinations of variables that do not appear in the input data be preserved (FALSE) or dropped (TRUE, default) |
.parallel | if |
.paropts | a list of additional options passed into
the |
list of results
This function splits data frames by variables.
If there are no results, then this function will return
a list of length 0 (list()
).
Hadley Wickham (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software, 40(1), 1-29. http://www.jstatsoft.org/v40/i01/.
linmod <- function(df) { lm(rbi ~ year, data = mutate(df, year = year - min(year))) } models <- dlply(baseball, .(id), linmod) models[[1]]#> #> Call: #> lm(formula = rbi ~ year, data = mutate(df, year = year - min(year))) #> #> Coefficients: #> (Intercept) year #> 118.924 -1.732 #>