我有两个数据框,dfa并且dfb:
dfa <- data.frame(
gene_name = c("MUC16", "MUC2", "MET", "FAT1", "TERT"),
id = c(1:5)
)
dfb <- data.frame(
gene_name = c("MUC1", "MET; BLEP", "MUC21", "FAT", "TERT"),
id = c(6:10)
)
看起来像这样:
> dfa
gene_name id
1 MUC16 1
2 MUC2 2
3 MET 3
4 FAT1 4
5 TERT 5
> dfb
gene_name id
1 MUC1 6
2 MET; BLEP 7
3 MUC21 8
4 FAT 9
5 TERT 10
dfa是我感兴趣的基因列表:我想保留它们出现的行dfb,注意数字(MUC1不是)。我的应该是这样的: MUC16new_df
> new_df
gene_name id
1 MET; BLEP 7
2 TERT 10
我的问题是常规dplyr::semi_join()确实完全匹配,这没有考虑到dfb$gene_names可以包含用 . 分隔的基因这一事实"; "。意思是用这个例子,"MET"不保留。
我试图调查fuzzyjoin::regex_semi_join,但我不能让它做我想要的......
欢迎使用 tidyverse 解决方案。(也许有stringr?!)
编辑:后续问题...
我将如何进行倒数anti_join?简单地更改semi_join为anti_join这种方法是行不通的,因为该行在MET; BLEP不应该出现的时候出现了......
filter(gene_name == new_col)在使用提供的简单数据集之后添加一个anti_join,但如果我像这样扭曲它:
dfa <- data.frame(
gene_name = c("MUC16", "MUC2", "MET", "FAT1", "TERT"),
id = c(1:5)
)
dfb <- data.frame(
gene_name = c("MUC1", "MET; BLEP", "MUC21; BLOUB", "FAT", "TERT"),
id = c(6:10)
)
……然后就没有了。在这里和我的真实数据集中,dfa不包含分号,它只是一列单个基因名称。但是dfb包含了很多信息,以及分号的多种组合...