根据 id 向量中的匹配进行过滤

filter based on match in vector by id

我正在寻找 data.table 一个简单问题的解决方案。我有这样的数据:

library(data.table)
data <- data.table(
  id = c(1,1,2,3,3),
  code = c("A1","A3", "B1", "A2", "B2")
)

我希望找到其中包含代码的唯一 ID

codes1 <- c("A1", "A2", "A3")

codes2 <- c("B1", "B2", "B3")

在两个单独的行上:可能的匹配项是那些具有与 codes1 codes2 中的元素匹配的代码的唯一 ID 对于第一行唯一 ID 和与 codes1 codes2 中的元素匹配的代码,用于该唯一 ID 的第二行(但如果代码包含在 codes1第一行,第二行必须是codes2,反之亦然)

所以我想这样结束:

data_want <- data.table(
  id = c(1,2,3),
  match = c(0,0,1)
)

我们可以使用 %in%any

library(data.table)
data[, .(match = +(any(codes1 %in% code) & any(codes2 %in% code))), by = id]

-输出

      id match
    <num> <int>
1:     1     0
2:     2     0
3:     3     1