R 筛选data.table,以便每个子集都是每个选定的数据块而不是行

R 筛选data.table,以便每个子集都是每个选定的数据块而不是行,r,data.table,R,Data.table,如果我有以下数据。表 matchID characterID info 1111 4 abc 1111 12 def 1111 1 ghi 2222 8 jkl 2222 7 mno 2222 3 pwr 3333 9 abc 3333 2 ghi 33333 4 jk

如果我有以下数据。表

matchID characterID info 1111 4 abc 1111 12 def 1111 1 ghi 2222 8 jkl 2222 7 mno 2222 3 pwr 3333 9 abc 3333 2 ghi 33333 4 jkl 匹配ID字符信息 11114 abc 111112def 11111 ghi 22228 jkl 22227 mno 22223压水堆 33339 abc 3333 2 ghi 333334 jkl 我想将其子集以查找特定的characterID,但返回与characterID关联的每个matchID。例如,如果我查询characterID=12,我应该得到以下数据集:

matchID characterID info 1111 4 abc 1111 12 def 1111 1 ghi 匹配ID字符信息 11114 abc 111112def 11111 ghi
那个data.table子集是什么样子的?我特别寻找datatable形式的东西[characterID=12,1:3,Info]

我们创建一个函数来获取与“characterID”匹配的数据集子集

library(dplyr)
f1 <- function(dat, charIDs) {

       dat %>%
           group_by(matchID) %>%
            filter(all(charIDs %in% characterID))
  }

我们也可以使用
data.table
选项

library(data.table)
setDT(df1)[ , if(all(12 %in% characterID)) .SD,  matchID]


df[df$matchID%in%df$matchID[df$characterID==12]
但我认为这不是
数据表的方法。最后三个是我要找的,谢谢。三者之间的计算复杂度有什么不同吗?@Alex the
.I
将是fasterA selfjoin似乎也在做合并的工作(Y[characterID==12,“matchID”],Y,by=“matchID”)@akrun,如果我想让查询稍微复杂一点,我需要4&info=ABC和12&info=DEF的字符,两者都在同一组matchID中。我可以在单个子集中执行此操作吗?或者我必须先对data.table进行一次子集划分,然后再使用新参数进行子集划分吗?@Alex由于评论中不清楚,请您以新问题的形式发布好吗
library(data.table)
setDT(df1)[ , if(all(12 %in% characterID)) .SD,  matchID]
setDT(df1)[ , .SD[all(12 %in% characterID)],  matchID]
setDT(df1)[df1[ , .I[all(12 %in% characterID)],  matchID]$V1]