Как учесть слияние / присоединение при добавлении лишних строк? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть набор данных генов, которые я сопоставляю с типом идентификатора белка. Затем я пытаюсь найти эти идентификаторы белков в другом втором наборе данных. Второй набор данных довольно большой - 11759454 строки. Я пытаюсь найти соответствующие идентификаторы белков с помощью слияния или объединения, например:

testdf <- join(proteindf, genes)  #or:
testdf <- merge(proteindf, genes, by.all='protein_id' , all.x=TRUE)

Они выполняются, но порядок строк неуместен, а testdf увеличивается в размере до номера строки 11775850.

Я не уверен, как решить эту проблему, у меня есть опыт работы в области биологии, и я пробовал запускать sql версию слияния, но это работает бесконечно без завершения.

Я не могу предоставить полные данные, но обычно наборы данных выглядят так:

#gene dataset:

     protein_id             Gene
1   9606.ENSP00000378868    A1CF
2   9606.ENSP00000384794    A4GALT
3   9606.ENSP00000324842    AACS
4   9606.ENSP00000000233    ARF5 
#proteindf:
       protein_id                 protein_id1    coexpression experiments database
1   9606.ENSP00000000233    9606.ENSP00000272298        0          0        0
2   9606.ENSP00000000233    9606.ENSP00000253401        0          0        0
3   9606.ENSP00000000233    9606.ENSP00000401445        0          0        0
4   9606.ENSP00000000233    9606.ENSP00000418915        0          0        0

В строках protein_id может быть много дубликатов, что, как я полагаю, усугубляет проблему.

Ожидаемый результат:

       protein_id           Gene            protein_id1    coexpression experiments database
1   9606.ENSP00000000233     ARF5       9606.ENSP00000272298        0          0        0
2   9606.ENSP00000000233     ARF5       9606.ENSP00000253401        0          0        0
3   9606.ENSP00000000233     ARF5       9606.ENSP00000401445        0          0        0
4   9606.ENSP00000000233     ARF5       9606.ENSP00000418915        0          0        0

Затем я создал другой набор данных, используя слияние (переименование гена протеин_ид в протеин_ид1), чтобы получить имена генов для столбца "протеин_ид1", это также дает мне те же 11775850 строк. Приветствуется любая помощь в понимании этого.

1 Ответ

1 голос
/ 16 июня 2020

Непонятно, в чем именно проблема, из-за отсутствия примера кодировки.

Во-первых, by.all должно быть by. Во-вторых, причина, по которой вы видите увеличенное количество наблюдений, может быть только в том, что есть несколько совпадений для некоторых значений в protein_id в gene (например, идентификатор не уникален в наборе данных генов).

Мы можем извлечь повторяющиеся строки, используя testdf[duplicated(testdf$protein_id),] или:

genes$growid <- seq_len(nrow(genes))
proteindf$prowid <- seq_len(nrow(proteindf))
mdf <- merge(proteindf, merge, by = 'protein_id', all.x = TRUE)
gids_dups <- duplicated(mdf$growid)
pids_dups <- duplicated(mdf$prowid)
#Gene duplicate rows
mdf[gids_dups, ] 
#protein duplicate rows (should be the same)
mdf[pids_dups, ] 

Решение этой проблемы зависит от вашего набора данных, если это действительно проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...