我有两个数据框:SCR和matchedSCR。它们各自包含蛋白质标题列表。 matchedSCR是SCR的子集,直接由SCR创建。因此,匹配的SCR蛋白质标题的字符串应与SCR中的对应物相同,并且能够作为连接它们的指标。但是,当我尝试匹配记录时,无论我使用何种方法,它们中只有一小部分匹配。以下全部匹配约6000个应该是17000条记录。
subset(SCR, (SCR$MESH_HEADING %in% matchedSCR$Heading))
SCR[SCR$MESH_HEADING %in% matchedSCR$Heading, ]
sqldf("select * from SCR join matchedSCR on SCR.MESH_HEADING=matchedSCR.Heading")
令人抓狂的是我能找到一条缺失的线并手工匹配!
if(SCR$MESH_HEADING[64] == matchedSCR$Heading[2]) {print("T")}
[1] "T"
将SCR匹配到不同的子集数据帧,orthologSCR,几乎完全以相同的方式从SCR创建,完美地工作,所以我认为问题是以某种方式匹配的SCR,但我无法弄清楚为什么。它只是一列字符(而不是因素),如:
VisA protein, Streptomyces virginiae
VisB protein, Streptomyces virginiae
VisC protein, Streptomyces virginiae
VisD protein, Streptomyces virginiae
subpeptin JM-A, Bacillus subtilis
subpeptin JM-B, Bacillus subtilis
BT peptide antibiotic, Brevibacillus texasporus
LI-Fb peptide, Paenibacillus polymyxa
有人能说出这些角色比较失败的原因吗?特殊角色会因为任何原因在这里绊倒吗? (当与正在工作的其他子集数据帧匹配时,它们似乎并不重要。) 我真正需要的是来自SCR的无与伦比的数据。基于与创建匹配的SC的复杂选择相反的情况,我现在可以通过一个非常慢的过程生成这个,但我真的想从错误中吸取教训,所以我不会再遇到这个错误
答案 0 :(得分:0)
您可能会在之前或之后有一些白色字符......您可以尝试:How to trim leading and trailing whitespace in R?
您也可以尝试将所有内容转换为小写。您可以使用tm
库执行此操作。
在你的情况下,最好的办法就是看看发生了什么:
library(dplyr)
SCR$Heading <- SCR$MESH_HEADING
full_join(SCR,matchedSCR, by=Heading) %>% View
调查df,看看哪些是匹配的,哪些不是......这将有助于您理解问题。您也可以尝试anti_join
仅查看不匹配的记录。
更糟糕的情况,请查看https://cran.r-project.org/web/packages/fuzzyjoin/fuzzyjoin.pdf