【问题标题】:Match On (of Filter By) Column Contents in List匹配列表中的(过滤依据)列内容
【发布时间】: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 %&gt;% filter(map2_lgl(ID, IDS_VERIFIED, is_in))... 对我来说似乎很愚蠢。
  • 傻为什么?我已经安装了 magrittr,我只是从未深入研究过它。我应该尝试,还是看看是否有更好的解决方案?谢谢,弗兰克。
  • 我的意思很傻,因为当功能相同的基本 R 已经存在时,我会引入额外的 'verse 动词,所以你可以这样做...df %&gt;% filter(mapply(`%in%`, ID, IDS_VERIFIED))
  • 谢谢!尝试了 magrittr ,它完全符合我的需要。我也会尝试基本的 R 方式,因为我是这样学习的。 (如果不是很明显,我是 R 新手。)
  • 顺便说一句,弗兰克,如果您发布您的解决方案作为答案,我可以检查一下!

标签: r join filter dplyr


【解决方案1】:

只使用 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.)

【讨论】:

  • 再次感谢弗兰克。实际上,我使用 str_extract_all 和正则表达式匹配函数生成了列表列。有没有更好的方法让我做整个事情?我应该添加一个我在说什么的例子,还是说清楚?
  • 嗯,我不确定。我通常设法避免对列表列进行分析,但也许您的用例有所不同。如果你想发布它,我会建议一个新问题或者community.rstudio.com(这比 Stack Overflow 对“最佳实践”问题更开放)。我不知道自己是否真正了解 stringr 函数。
猜你喜欢
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
相关资源
最近更新 更多