Сравнение нескольких фреймов данных на основе уникальных значений в одном столбце и нахождение перекрывающихся значений во втором столбце в нескольких фреймах данных в R - PullRequest
0 голосов
/ 26 января 2019

Я хотел спросить совета, основываясь на проблеме, с которой я столкнулся, пытаясь определить пересекающиеся значения в нескольких фреймах данных, но, на мой взгляд, это немного сложно, и я не могу понять, как это сделать, используя обычную функцию пересечения ,

У меня есть несколько фреймов данных (до 12) с несколькими столбцами, которые показывают изменения генов во времени (например, 5 временных точек) и как другие гены коррелируют с этим изменением (то есть другие гены, которые также снижаются или повышаются). таким образом, что коррелирует с другими генами в данных). Анализ берет каждый ген по одному, использует этот ген в качестве эталона и проверяет каждый ген против него, чтобы увидеть, коррелирует ли характер изменения во времени этих генов с первым эталонным геном. Это повторяется для каждого гена. Поэтому, взяв в качестве примера один фрейм данных, результаты будут выглядеть следующим образом.

Столбец 1 содержит гены, которые служат эталонным геном, это значение может встречаться многократно, если другие гены коррелируют с изменениями во времени в этом гене. например, если ген b, c и d коррелирует с геном a, первые два столбца показывают следующее:

a b
a c
a d

То же самое для гена b и так далее, и так четвертого 20000 раз (количество генов)! Надеюсь, это имеет смысл?

b a
b c
b d

Приведенный выше анализ проводится в нескольких разных выборках, поэтому я получу до 12 фреймов данных, каждый из которых представляет собой разные выборки с результатами, подробно описанными выше.

Цель (и заранее извиняюсь, что у меня нет кода, так как я не совсем уверен, с чего начать!), Так как я думаю, что лучше всего это сделать, создав функцию для этого: Для гена 'x' в номере столбца 1, в каждом отдельном кадре данных я хотел бы видеть, имеют ли столбец 2 перекрывающиеся значения.

В приведенном выше примере несколько фреймов данных могут выглядеть следующим образом:

df1
a b
a c
a d
df2
a d
a c
a e
df3
a d
a e
a f

Таким образом, сравнивая фреймы данных, функция идентифицирует, что для гена a существует одно значение столбца между всеми фреймами данных ... геном d .. так как оно является общим для всех фреймов данных для гена a.

Аналогично, функция будет выполнять этот анализ перекрытия для каждого отдельного гена ... ген a, b, c..etc

Выходными данными будут значения перекрытия для каждого отдельного гена в столбце 2, которые происходят для одного и того же гена в столбце a во всех фреймах данных

Вставляю голову (анализ)

Feature1           Feature2 delay      pBefore       pAfter  corBefore
1 ENSMUSG00000001525 ENSMUSG00000026211     0 0.1093914984 0.1093914984  0.7161907
2 ENSMUSG00000001525 ENSMUSG00000055653    -1 0.0916478944 0.1047749696  0.7414240
3 ENSMUSG00000001525 ENSMUSG00000003038     0 0.0006810160 0.0006810160  0.9786161

плюс еще много других генов в функции 1, каждый из которых имеет гены в функции 2, связанные с генами в функции 1

этот кадр данных будет одним образцом, а для других образцов у меня будет отдельный результат

Буду очень признателен за любые подсказки о том, как создать код для достижения этой цели. Кроме того, было бы неплохо иметь возможность указать, что я также хотел бы видеть более одного круга генов, которые содержат только, например, pBefore>> 0,8 или то же самое для столбца задержки и т. Д. *

Большое спасибо, что нашли время прочитать это!

1 Ответ

0 голосов
/ 27 января 2019

Если я правильно понимаю, вы можете добавить все 12 фреймов данных как

   df_final = pd.concat([df1,df2.....df12])

Найти комбинацию генов, присутствующих во всех 12 фреймах данных

   df_n = df_final.groupby(['A','B']).size().reset_index(name = 'count') 

Поскольку существует 12 фреймов данных

   df_n[df_n['count']==12] 

даст вам пару генов во всех 12 кадрах данных.

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