【发布时间】:2017-10-06 15:00:34
【问题描述】:
首先,这是我的数据:
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。但是我需要一段时间才能弄清楚如何使用它,我需要解决这个问题。
谢谢。
【问题讨论】:
-
如果你加载整个 tidyverse 和 magrittr,那么
df %>% filter(map2_lgl(ID, IDS_VERIFIED, is_in))... 对我来说似乎很愚蠢。 -
傻为什么?我已经安装了 magrittr,我只是从未深入研究过它。我应该尝试,还是看看是否有更好的解决方案?谢谢,弗兰克。
-
我的意思很傻,因为当功能相同的基本 R 已经存在时,我会引入额外的 'verse 动词,所以你可以这样做...
df %>% filter(mapply(`%in%`, ID, IDS_VERIFIED)) -
谢谢!尝试了 magrittr ,它完全符合我的需要。我也会尝试基本的 R 方式,因为我是这样学习的。 (如果不是很明显,我是 R 新手。)
-
顺便说一句,弗兰克,如果您发布您的解决方案作为答案,我可以检查一下!