J {data.table} | R Documentation |
Creates a join data.table
Description
Creates a data.table
for use in i
in a [.data.table
join.
Usage
# DT[J(...)] # J() only for use inside DT[...]
# DT[.(...)] # .() only for use inside DT[...]
# DT[list(...)] # same; .(), list() and J() are identical
SJ(...) # DT[SJ(...)]
CJ(..., sorted=TRUE, unique=FALSE) # DT[CJ(...)]
Arguments
... |
Each argument is a vector. Generally each vector is the same length, but if they are not then the usual silent recycling is applied. |
sorted |
logical. Should |
unique |
logical. When |
Details
SJ
and CJ
are convenience functions to create a data.table
to be used in i
when performing a data.table
'query' on x
.
x[data.table(id)]
is the same as x[J(id)]
but the latter is more readable. Identical alternatives are x[list(id)]
and x[.(id)]
.
When using a join table in i
, x
must either be keyed or the on
argument be used to indicate the columns in x
and i
which should be joined. See [.data.table
.
Value
J
: the same result as calling list
, for which J
is a direct alias.
SJ
: Sorted Join. The same value as J()
but additionally setkey()
is called on all columns in the order they were passed to SJ
. For efficiency, to invoke a binary merge rather than a repeated binary full search for each row of i
.
CJ
: Cross Join. A data.table
is formed from the cross product of the vectors. For example, CJ
on 10 ids and 100 dates, returns a 1000 row table containing all dates for all ids. If sorted = TRUE
(default), setkey()
is called on all columns in the order they were passed in to CJ
. If sorted = FALSE
, the result is unkeyed and input order is retained.
See Also
Examples
DT = data.table(A=5:1, B=letters[5:1])
setkey(DT, B) # reorders table and marks it sorted
DT[J("b")] # returns the 2nd row
DT[list("b")] # same
DT[.("b")] # same using the dot alias for list
# CJ usage examples
CJ(c(5, NA, 1), c(1, 3, 2)) # sorted and keyed data.table
do.call(CJ, list(c(5, NA, 1), c(1, 3, 2))) # same as above
CJ(c(5, NA, 1), c(1, 3, 2), sorted=FALSE) # same order as input, unkeyed
# use for 'unique=' argument
x = c(1, 1, 2)
y = c(4, 6, 4)
CJ(x, y) # output columns are automatically named 'x' and 'y'
CJ(x, y, unique=TRUE) # unique(x) and unique(y) are computed automatically
z = 0:1 + (0:1)*1i
CJ(x, z, sorted = FALSE) # support for sorting complex is not yet implemented