首先,这是我的数据:
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
。但是我需要花一些时间来了解如何使用它,我需要解决这个问题。
感谢。
答案 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.)