按条件对数据表进行子集筛选,但保留属于同一组的所有行。

3

我有这样的数据:

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个回答

7
我们可以使用any函数在按'code'分组后创建一个条件来筛选行。
dt1[, if(any(value > 50)) .SD,  code]

或者不使用 if 条件语句

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

或者获取行索引(.I),并根据其进行子集筛选。
dt1[dt1[,  .I[any(value > 50)],  code]$V1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接