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

时间:2019-02-19 18:25:12

标签: r data.table subset

我有如下数据:

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))

我想对其进行子集化,以便保留包含大于或小于给定数字的值的任何组(code)。例如,如果我想要包含值大于50的任何组,则结果将如下所示:

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

1 个答案:

答案 0 :(得分:7)

在按“代码”分组以对行进行子集化之后,我们用any创建条件

dt1[, if(any(value > 50)) .SD,  code]

或者没有if条件

dt1[,  .SD[any(value > 50)],  code]

或获取行索引(.I)和基于该行的子集

dt1[dt1[,  .I[any(value > 50)],  code]$V1]