【发布时间】:2020-09-03 23:37:04
【问题描述】:
我在名为“id”的 data.frame 中有以下列:
example_0test0|EMM3.71|NTERM|
example_0test1|_EMM92.2|CTERM|
example_0test2|_EMM92.2|NTERM|
example_0test0|EMM1|NTERM|
example_0test0|EMM100|NTERM|
example_0test0|EMM1.11|NTERM|
example_0test0|EMM1.123|NTERM|
我想使用 dplyr 过滤器函数过滤精确字符列表,例如(保持简单):EMM1,以提供以下输出:
> test_df2
id col1 col2
1 example_0test0|EMM1|NTERM| 10.4 exp4
2 example_0test0|EMM1.11|NTERM| 10.3 exp6
3 example_0test0|EMM1.123|NTERM| 10.3 exp7
我有一个像这样保存的字符的因子列表,我想用作过滤术语的输入:
"EMM1|EMM101|EMM103|EMM104|EMM108.1|EMM11|EMM113|EMM114|EMM116.1|EMM118|EMM12|EMM123|EMM19.4|EMM197|EMM2|"
我尝试过使用“filter”和“str_detect”的组合,但如果我的搜索列表包含“EMM1”,我想包含“EMM1.0”或“EMM1.1”之类的内容
我怀疑列中的每个 EMM 术语都包含在“|”中比如 "text|EMM1.0|text" 有没有办法用它来过滤?
这是我正在使用的 data.frame 类型的一个小例子:
> dput(test_df)
structure(list(id = c("example_0test0|EMM3.71|NTERM|", "example_0test1|_EMM92.2|CTERM|",
"example_0test2|_EMM92.2|NTERM|", "example_0test0|EMM1|NTERM|",
"example_0test0|EMM100|NTERM|", "example_0test0|EMM1.11|NTERM|",
"example_0test0|EMM1.123|NTERM|"), col1 = c(10.1, 10.2, 10.3,
10.4, 10.3, 10.3, 10.3), col2 = c("exp1", "exp2", "exp3", "exp4",
"exp5", "exp6", "exp7")), class = "data.frame", row.names = c(NA,
-7L))
【问题讨论】:
-
已编辑帖子。请记住,上面的预期输出是过滤一个术语“EMM1”以返回所有包含“EMM1”、“EMM1.11”等内容的内容,但实际上我有数百个需要过滤,就像问题中的因子列表一样...谢谢
-
我下面的解决方案是给出你显示的预期输出
-
我更新了解决方案。可能会有所帮助
-
subset(test_df, grepl(pat, id))不起作用?pat是pat <- "EMM1|EMM101|EMM103|EMM104|EMM108.1|EMM11|EMM113|EMM114|EMM116.1|EMM118|EMM12|EMM123|EMM19.4|EMM197|EMM2"哪里? -
@RonakShah 这给出了以 EMM1 开头的所有内容,例如 emm106.9 EMM109.0 等,但这是我所追求的那种东西