过滤一个data.table让每一个子集,是每个数据块的选择,而不是排
问题描述:
如果我有以下data.table过滤一个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
我想子集它来寻找特定characterIDs,但回报每一位matchID与characterID相关联。例如,如果我查询characterID = 12,我应该得到这个数据集:
matchID characterID info 1111 4 abc 1111 12 def 1111 1 ghi
什么data.table子集看起来像?我正在寻找数据表 [characterID = 12,1:3,Info]的形式。
答
我们创建一个函数来获取数据集与相匹配的子集“或CharacterId”
library(dplyr)
f1 <- function(dat, charIDs) {
dat %>%
group_by(matchID) %>%
filter(all(charIDs %in% characterID))
}
我们可以为单一的“ID”或多个ID传递给filter
行
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]
'DF [DF $ matchID%的DF%$ matchID [DF $ ==或CharacterId 12]'但是我觉得这不是'数据。桌子'做它的方式。 –