本文介绍了unique.data.table选择最后一行代替第一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在键控的 data.table
上调用 unique
,每个组都有唯一的行。如果线路重复,则采用第一个。当我需要取最后一个代替(通常是最后一个临时事务)时,我使用 .SD [.N]
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
您知道更快的方法吗?
推荐答案
创建一个 data.table
,其中包含键变量的唯一组合,然后使用<$ c $加入c> mult ='last'
Create a data.table
that contains the unique combinations of the key variables then join using mult = 'last'
使用 .SD
很方便,但是很慢。如果愿意,可以使用 .I
。
Using .SD
is convenient, but slow. You could use .I
instead if you wished.
dtu <- unique(dt)[,key(dt), with = FALSE]
dt[dtu, mult = 'last']
Or
dt[ dt[, .I[.N], by = key(dt)]$V1]
这篇关于unique.data.table选择最后一行代替第一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!