首页 > 解决方案 > 根据一列中的唯一值比较多个数据帧,并在 R 中的多个数据帧的第二列中查找重叠值

问题描述

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

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

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

a b
a c
a d

同样的基因 b 等等等等第四 20,000 次(基因数量)!希望这有意义吗?

b a
b c
b d

上面的分析是在多个不同的样本中进行的,所以我将获得最多 12 个数据帧,这些数据帧是不同的样本,每个数据帧的结果都如上所示。

客观(并提前道歉,我没有代码,因为我不完全确定从哪里开始!)因为我认为这可能最好通过为此创建一个函数来实现:对于第 1 列中的基因 'x',在每个数据框,我想看看第 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..等

输出将是第 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 或延迟列等的相同...

非常感谢您花时间阅读本文!

标签: rdataframecompareintersectionoverlap

解决方案


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


推荐阅读