| transform.data.table | R Documentation |
Utilities for data.table transformation.
within, transform and other similar functions in data.table are not just provided for users who expect them to work, but for non-data.table-aware packages to retain keys, for example. Hopefully the faster and more convenient data.table syntax will be used in time. See examples.
## S3 method for class 'data.table'
transform(`_data`, ...)
## S3 method for class 'data.table'
within(data, expr, ...)
data, _data |
data.table to be transformed. |
... |
for |
expr |
expression to be evaluated within the data.table. |
within is like with, but modifications (columns changed,
added, or removed) are updated in the returned data.table.
Note that transform will keep the key of the
data.table provided the targets of the transform (i.e. the
columns that appear in ...) are not in the key of the data.table.
within also retains the key provided the key columns are not touched.
The modified value of a copy of data.
transform, within and :=
DT <- data.table(a=rep(1:3, each=2), b=1:6)
DT2 <- transform(DT, c = a^2)
DT[, c:=a^2]
identical(DT,DT2)
DT2 <- within(DT, {
b <- rev(b)
c <- a*2
rm(a)
})
DT[,`:=`(b = rev(b),
c = a*2,
a = NULL)]
identical(DT,DT2)
DT$d = ave(DT$b, DT$c, FUN=max) # copies entire DT, even if it is 10GB in RAM
DT = DT[, transform(.SD, d=max(b)), by="c"] # same, but even worse as .SD is copied for each group
DT[, d:=max(b), by="c"] # same result, but much faster, shorter and scales
# Multiple update by group. Convenient, fast, scales and easy to read.
DT[, `:=`(minb = min(b),
meanb = mean(b),
bplusd = sum(b+d)), by=c%/%5]
DT
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.