按条件子集data.table但保留属于组的所有行

Chr*_*ris 3 r subset data.table

我的数据看起来像这样:

require("data.table")
dt1 <- data.table(
  code=c("A001", "A001","A001","A002","A002","A002","A002","A003","A003"),
  value=c(40,38,55,10,12,16,18,77,87))
Run Code Online (Sandbox Code Playgroud)

我想将其子集化,以便code保留包含超过或低于给定数字的值的任何group().例如,如果我想要任何包含超过50的值的组,那么结果将如下所示:

dt2 <- data.table(
  code=c("A001", "A001","A001","A003","A003"),
  value=c(40,38,55,77,87))
Run Code Online (Sandbox Code Playgroud)

akr*_*run 7

我们创建一个条件,any经过"代码"分组后对行进行子集化

dt1[, if(any(value > 50)) .SD,  code]
Run Code Online (Sandbox Code Playgroud)

或没有if条件

dt1[,  .SD[any(value > 50)],  code]
Run Code Online (Sandbox Code Playgroud)

或者根据它获取行索引(.I)和子集

dt1[dt1[,  .I[any(value > 50)],  code]$V1]
Run Code Online (Sandbox Code Playgroud)