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)
我们创建一个条件,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)