data.table

High-performance data manipulation with concise syntax: DT[i, j, by] — "take DT, subset rows using i, calculate j, grouped by by".

High-performance data manipulation with concise syntax: DT[i, j, by] — "take DT, subset rows using i, calculate j, grouped by by".

dtplyr translates dplyr code into data.table; tidytable offers tidyverse syntax with data.table speed.

library(data.table)
DT <- as.data.table(penguins)
DT <- fread("big.csv")

DT[species == "Adelie"]                                    # filter rows
DT[order(-body_mass_g)]                                    # sort
DT[, .(species, body_mass_g)]                              # select columns (.() = list())
DT[, .(mean_mass = mean(body_mass_g, na.rm = TRUE)), by = species]   # grouped summary
DT[, .N, by = .(species, island)]                          # counts
DT[, mass_kg := body_mass_g / 1000]                        # add column BY REFERENCE (no copy)
DT[, c("a", "b") := .(1, 2)]                               # multiple columns
DT[, mass_kg := NULL]                                      # delete column
DT[body_mass_g > 5000, big := TRUE]                        # conditional update
DT[, lapply(.SD, mean, na.rm = TRUE), by = species, .SDcols = patterns("_mm$")]
DT[, head(.SD, 2), by = species]                           # top rows per group
DT[, rank := frank(-body_mass_g), by = species]

# Keys & joins
setkey(DT, species)
DT["Gentoo"]                                               # fast keyed lookup
X[Y, on = "id"]                                            # right join of Y onto X
X[Y, o
…