This question already has answers here:
Filter groups by occurrence of a value
(2个答案)
2年前关闭。
如果我有以下data.table
matchID characterID信息
1111 4 abc
1111 12防御
1111 1吉
2222 8 jkl
2222 7 mno
2222 3 pwr
3333 9 abc
3333 2吉
33333 4公斤
我想对其进行子集化以查找特定的characterID,但返回与characterID相关联的每个matchID。例如,如果我查询characterID = 12,则应获取以下数据集:
matchID characterID信息
1111 4 abc
1111 12防御
1111 1吉
该data.table子集是什么样的?我专门在寻找某种形式为datatable [characterID = 12,1:3,Info]的形式。
我们既可以传递单个“ID”,也可以传递多个ID对行进行
我们也可以使用
要么
要么
(2个答案)
2年前关闭。
如果我有以下data.table
matchID characterID信息
1111 4 abc
1111 12防御
1111 1吉
2222 8 jkl
2222 7 mno
2222 3 pwr
3333 9 abc
3333 2吉
33333 4公斤
我想对其进行子集化以查找特定的characterID,但返回与characterID相关联的每个matchID。例如,如果我查询characterID = 12,则应获取以下数据集:
matchID characterID信息
1111 4 abc
1111 12防御
1111 1吉
该data.table子集是什么样的?我专门在寻找某种形式为datatable [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]
08-25 06:36