如何从一个数据框中的模式中获取另一个数据框的模式?
How to grep from patterns in one dataframe for another?
我有一个数据集,它只是一个基因列表:
Genes
Gene1
Gene2
Gene3
Gene4
Gene5
每当提到这些基因时,我都希望找到并从另一个数据集中提取出来。
我的其他数据集看起来像
Study ID Title Drug ...
1 Study of Gene1 Gene1-drug
2 Study of Gene10 Gene10-drug
3 Study of something Gene4-drug
我希望在我的第二个数据集的任何列中出现任何基因时提取。
我很难找到足够相似的问题来重复使用,虽然我知道有很多类似的问题,但我遗漏了一些东西,我发现的大多数例子都有特定的 grep 模式。
到目前为止我一直在尝试:
test = df[apply(df, 1, function(i) any(stringr::str_detect(i, fixed(genelist)))),]
这会输出 0 行,但我知道有些行在提到基因的地方有部分匹配。我如何修改它以从基因列表数据框中提取和搜索基因?
我建议您使用 purrr
的方法。
- 将数据帧的每一行作为一个字符串
- 检测每一行是否存在
df_genes$Genes
中的单词之一
- 总结结果
library(stringr)
library(purrr)
rows <- pmap(df, str_c, sep = " ") %>%
map(str_detect, paste0('\b', df_genes$Genes, '\b')) %>%
map_lgl(any)
df[rows,]
#> Study_ID Title Drug
#> 1 1 Study of Gene1 Gene1-drug
#> 3 3 Study of something Gene4-drug
paste0
+\b
的想法来自
输入数据:
df_genes <- data.frame(Genes = c("Gene1",
"Gene2",
"Gene3",
"Gene4",
"Gene5"))
df <- data.frame(Study_ID = 1:3,
Title = c("Study of Gene1",
"Study of Gene10",
"Study of something"),
Drug = c("Gene1-drug",
"Gene10-drug",
"Gene4-drug"))
检查每一行中找到了哪些基因:
pmap(df, str_c, sep = " ") %>%
map(str_detect, paste0('\b', df_genes$Genes, '\b')) %>%
map(~keep(df_genes$Genes, .))
#> [[1]]
#> [1] "Gene1"
#>
#> [[2]]
#> character(0)
#>
#> [[3]]
#> [1] "Gene4"
我有一个数据集,它只是一个基因列表:
Genes
Gene1
Gene2
Gene3
Gene4
Gene5
每当提到这些基因时,我都希望找到并从另一个数据集中提取出来。
我的其他数据集看起来像
Study ID Title Drug ...
1 Study of Gene1 Gene1-drug
2 Study of Gene10 Gene10-drug
3 Study of something Gene4-drug
我希望在我的第二个数据集的任何列中出现任何基因时提取。
我很难找到足够相似的问题来重复使用,虽然我知道有很多类似的问题,但我遗漏了一些东西,我发现的大多数例子都有特定的 grep 模式。
到目前为止我一直在尝试:
test = df[apply(df, 1, function(i) any(stringr::str_detect(i, fixed(genelist)))),]
这会输出 0 行,但我知道有些行在提到基因的地方有部分匹配。我如何修改它以从基因列表数据框中提取和搜索基因?
我建议您使用 purrr
的方法。
- 将数据帧的每一行作为一个字符串
- 检测每一行是否存在
df_genes$Genes
中的单词之一 - 总结结果
library(stringr)
library(purrr)
rows <- pmap(df, str_c, sep = " ") %>%
map(str_detect, paste0('\b', df_genes$Genes, '\b')) %>%
map_lgl(any)
df[rows,]
#> Study_ID Title Drug
#> 1 1 Study of Gene1 Gene1-drug
#> 3 3 Study of something Gene4-drug
paste0
+\b
的想法来自
输入数据:
df_genes <- data.frame(Genes = c("Gene1",
"Gene2",
"Gene3",
"Gene4",
"Gene5"))
df <- data.frame(Study_ID = 1:3,
Title = c("Study of Gene1",
"Study of Gene10",
"Study of something"),
Drug = c("Gene1-drug",
"Gene10-drug",
"Gene4-drug"))
检查每一行中找到了哪些基因:
pmap(df, str_c, sep = " ") %>%
map(str_detect, paste0('\b', df_genes$Genes, '\b')) %>%
map(~keep(df_genes$Genes, .))
#> [[1]]
#> [1] "Gene1"
#>
#> [[2]]
#> character(0)
#>
#> [[3]]
#> [1] "Gene4"