根据一列中的唯一值比较多个数据帧,并在R

时间:2019-01-26 20:23:55

标签: r dataframe compare intersection overlap

我想根据我在尝试识别多个数据帧中的相交值时遇到的问题寻求建议,但是在我看来这有点复杂,我无法弄清楚如何使用正常的相交函数来做到这一点。

我有几个数据框(最多12个),其中多列显示随时间变化的基因变化(例如5个时间点),以及其他基因如何与这种变化相关(例如,其他也下降或上升的基因)以与数据中其他基因相关的方式)。分析一次获取每个基因,将该基因作为参考,并针对每个基因进行测试,以查看这些基因随时间变化的模式是否与第一个参考基因相关。对于每个单个基因重复此过程。因此,以一个数据帧为例,结果将如下所示。

第1列包含用作参考基因的基因,如果其他基因与该基因随时间的变化相关,则此值可以多次出现。例如,如果基因b,c和d与基因a相关,则前两列显示如下:

a b
a c
a d

对于基因b等等同样如此,因此第四次20,000次(基因数目)!希望这有意义吗?

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中的基因相关联

此数据帧将是一个样本,而其他样本将有一个单独的结果

我非常感谢有关如何创建代码以实现此目标的任何提示。另外,很高兴能够指定我也很乐意看到仅包含例如≥0.8的pBefore的基因,或者对于延迟列等...

非常感谢您抽出宝贵时间阅读本文!

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则可以将所有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个数据框中提供一对基因。