calling unique
on a keyed data.table
you'll have unique lines per each group. In case of duplicated lines the first will be taken. When I need the take the last instead ( in general the last temporal transaction) I use .SD[.N]
library(data.table)
library(microbenchmark)
dt <- data.table(id=sample(letters, 10000, T), var=rnorm(10000), key="id")
microbenchmark(unique(dt), dt[, .SD[.N], by=id])
Unit: microseconds
expr min lq median uq max neval
unique(dt) 570.882 586.1155 595.8975 608.406 3209.122 100
dt[, .SD[.N], by = id] 6532.739 6637.7745 6694.3820 6776.968 208264.433 100
do you know a faster way to do the same?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…