如果我有以下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 jkl
我想将其子集化以查找特定的characterID,但返回与characterID关联的每个matchID。例如,如果我查询characterID = 12,我应该得到这个数据集:
matchID characterID info 1111 4 abc 1111 12 def 1111 1 ghi
data.table子集是什么样的?我特意寻找 datatable [characterID = 12,1:3,Info]形式的东西。
答案 0 :(得分:3)
我们创建一个函数来获取与' characterID匹配的数据集子集'
library(dplyr)
f1 <- function(dat, charIDs) {
dat %>%
group_by(matchID) %>%
filter(all(charIDs %in% characterID))
}
我们可以单独传递ID&#39; ID&#39;或filter
行的多个ID
f1(df1, 12)
# A tibble: 3 x 3
# Groups: matchID [1]
# matchID characterID info
# <int> <int> <chr>
#1 1111 4 abc
#2 1111 12 def
#3 1111 1 ghi
f1(df1, c(7, 3))
# A tibble: 3 x 3
# Groups: matchID [1]
# matchID characterID info
# <int> <int> <chr>
#1 2222 8 jkl
#2 2222 7 mno
#3 2222 3 pwr
我们也可以使用data.table
选项
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]