我在名为“ 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|"
我曾尝试使用结合使用“过滤器”和“ 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))
您可以使用 :
pat <- "EMM1|EMM101|EMM103|EMM104|EMM108.1|EMM11|EMM113|EMM114|EMM116.1|EMM118|EMM12|EMM123|EMM19.4|EMM197|EMM2"
subset(test_df, grepl(sprintf('(%s)(\\.|\\|)', pat), id))
# id col1 col2
#4 example_0test0|EMM1|NTERM| 10.4 exp4
#6 example_0test0|EMM1.11|NTERM| 10.3 exp6
#7 example_0test0|EMM1.123|NTERM| 10.3 exp7
pat
由"EMM"
我们另外想要的所有值组成,我们通过sprintf
仅返回那些带有a"."
或"|"
在这些pat
值之后的值来创建模式。
我们也可以将其与filter
和一起使用str_detect
。
library(dplyr)
library(stringr)
test_df %>% filter(str_detect(id, sprintf('(%s)(\\.|\\|)', pat)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句