unique.data.table选择最后一行代替第一行

Mic*_*ele 4 r data.table

呼叫unique键控data.table你每个组都有独特的线路.如果是重复的行,则将采用第一行.当我需要取最后一个(通常是最后一个临时事务)我使用.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
Run Code Online (Sandbox Code Playgroud)

你知道更快的方法吗?

mne*_*nel 8

创建一个data.table包含关键变量的唯一组合然后使用连接mult = 'last'

使用.SD很方便,但速度缓慢..I如果你愿意,你可以使用.

dtu <- unique(dt)[,key(dt), with = FALSE]
dt[dtu, mult = 'last']
Run Code Online (Sandbox Code Playgroud)

要么

 dt[ dt[,  .I[.N], by = key(dt)]$V1]
Run Code Online (Sandbox Code Playgroud)