使用 by 分组时删除条件为 j 的行

Delete row with condition stated in j while grouping with by

我想知道是否有更优雅的方法来实现以下 data.table:首先,使用 by 进行一些分组,然后为每个组确定是否 data.table 中提到的条件=13=]被满足,然后删除那些条件为真的行。

我要从 DT 中删除的行是:

DT[ , .SD[t %in% t_p1 | t %in% t_m1], by=id]

所以,为了从 DT 中删除行,我做了:

DT[!DT[ , .I[t %in% t_p1 | t%in% t_m1], by=id]$V1]

有没有更优雅的东西,特别是。没有 $V1(这在这里并不是真正的不言自明)并且没有对一个变量进行分组(这只是误用于选择具有相同 value/subsetting 的条目)?

一个简单的方法是:

DT[!((duplicated(id) | duplicated(id, fromLast = TRUE)) & (t %in% t_p1 | t %in% t_m1)), ]

(duplicated(id) | duplicated(id, fromLast = TRUE)by= 替换为单个列,因为它会选择 id 中具有相同值的所有行 - 不仅是(额外的)重复项,还有第一次出现的行)