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

问题描述 投票:3回答:1

我的数据看起来像这样:

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))
r data.table subset
1个回答
7
投票

我们在用'code'分组后用any创建一个条件来对行进行子集化

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

或者没有if条件

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

或者根据它得到行索引(.I)和子集

dt1[dt1[,  .I[any(value > 50)],  code]$V1]
© www.soinside.com 2019 - 2024. All rights reserved.