2016-10-19 5 views
0

У меня есть два кадра данных: SCR и matchSCSC. Каждый из них содержит список заголовков белков. matledSCR - это подмножество SCR, созданное непосредственно из SCR. Строки для заголовков белков matchedSCR должны, таким образом, быть идентичны их аналогам в 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" 

Matching SCR к другому подмножеству dataframe, orthologSCR, созданный почти точно так же, как с ОПЗ, работает отлично, поэтому я предполагаю, что проблема как-то с 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

Исследовать, что ФР и посмотреть, какие матчи были сделаны, и которые не были ... что будет поможет вам понять проблему. Вы также можете попробовать anti_join, чтобы увидеть только непревзойденные записи.

худший случай, проверить https://cran.r-project.org/web/packages/fuzzyjoin/fuzzyjoin.pdf

+0

Спасибо! Я попробую ваши предложения. : – NotMyJob

+0

@NotMyJob, в этом сообществе принято пытаться решить данное решение, и если оно работает, отметьте как «ответили», и если вы хотите поблагодарить меня, вы отдадите мой ответ (комментируя, чтобы поблагодарить, на него нахмурились). Если он не работает, вы должны написать комментарий, определяющий, почему нет. Помните, это должно быть полезно для других после вас! –

 Смежные вопросы

  • Нет связанных вопросов^_^