匹配列表中的(过滤依据)列内容

时间:2017-10-06 15:00:34

标签: r join filter dplyr

首先,这是我的数据:

library(dplyr)
df <- data_frame(ID = c("22738", "22738", "25461", "25461", "21353", "22867", "22867", "23396", "24572", "25030", "25030", "25740", "25740"),IDS_VERIFIED = list(c("22540", "22867"), c("21648", "22738"), c("25030", "25293"), c("23075", "24127", "25461"), "21353", c("22540", "22867"), c("21648", "22738"), "23396", c("24545", "24572"), c("25030", "25293"), c("23075", "24127", "25461"), "25740", character(0)))

# A tibble: 13 x 2
      ID IDS_VERIFIED
   <chr>       <list>
 1 22738    <chr [2]>
 2 22738    <chr [2]>
 3 25461    <chr [2]>
 4 25461    <chr [3]>
 5 21353    <chr [1]>
 6 22867    <chr [2]>
 7 22867    <chr [2]>
 8 23396    <chr [1]>
 9 24572    <chr [2]>
10 25030    <chr [2]>
11 25030    <chr [3]>
12 25740    <chr [1]>
13 25740    <chr [0]>

我需要什么

我需要的是简单的。我需要按df$ID %in% df$IDS_VERIFIED进行过滤,最好是使用dplyr友好语法。

换句话说,如果ID在相应的IDS_VERIFIED列表中(对于该行),则标识 - 对于每一行。

我尝试过什么

尝试了显而易见的事实:

filter(ID %in% IDS_VERIFIED)

也试过愚蠢:

filter(ID %in% unlist(IDS_VERIFIED)

最后,我尝试回到我仍然没有学到的基础知识,因为我怀疑答案在lapply。但是我需要花一些时间来了解如何使用它,我需要解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:2)

只使用dplyr,

df %>% filter(mapply(`%in%`, ID, IDS_VERIFIED))

如果你正在学习“tidyverse”风格的R,那么还有

library(purrr)
library(magrittr)
df %>% filter(map2_lgl(ID, IDS_VERIFIED, is_in))

顺便说一下,对列表列的分析可能很慢。 (An example here.