我想知道是否有一种更优雅的方式来实现data.table:Frist,使用by
进行一些分组,然后为每个组确定j
中提到的条件满足,然后删除条件为真的那些行。
我要从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
(这里没有真正的解释)并且没有对一个变量进行分组(这只是因为选择具有相同值/子集的条目而被误导)?
答案 0 :(得分:0)
一个简单的方法是:
DT[!((duplicated(id) | duplicated(id, fromLast = TRUE)) & (t %in% t_p1 | t %in% t_m1)), ]
(duplicated(id) | duplicated(id, fromLast = TRUE)
将by=
替换为单个列,因为它会选择id
中具有相同值的所有行 - 而不仅仅是(附加)重复项,但第一次出现也是如此)< / p>