2016-10-19 33 views
0

我有兩個數據框:SCR和matchedSCR。他們每個都包含一個關於蛋白質標題的列表。 matchedSCR是SCR的一個子集,由SCR直接創建。匹配的SCR蛋白質標題的字符串因此應該與SCR中的對應字符串相同,並且能夠作爲鏈接它們的索引。但是,當我嘗試將記錄匹配起來時,無論使用什麼方法,只有一小部分匹配。以下全部匹配約爲6000條應該是17000條記錄。意外的失敗,匹配R中的兩個列表中的字符串

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以同樣的方式創建的,完美的作品,所以我想這個問題是不知何故與matchedSCR,但我想不出爲什麼。這只是個字符(不因素),如單柱:

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的不匹配數據。我現在可以根據與創建matchedSCR的複雜選擇相反的一個非常緩慢的過程來生成這個過程,但是我真的很想從我得到的錯誤中學習,所以我不會再遇到這個問題。

回答

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

+0

謝謝!我會嘗試你的建議。 : – NotMyJob

+0

@NotMyJob,在這個社區習慣性地嘗試給出的解決方案,如果它的工作,標記爲「回答」,如果你想給我的感謝,你upvote我的答案(評論說謝謝皺眉)。如果它不起作用,你會寫一個評論,說明爲什麼不。記住,這對你之後的其他人應該是有用的! –

相關問題