【发布时间】:2018-02-02 15:24:20
【问题描述】:
我正在尝试实现一种方法来计算本文先前描述的主题组合的频率 (https://www.nature.com/articles/ng.2870)。我是一名生物学家,并且是 R 语言的初学者,所以要完成看似相当简单的任务非常困难......
我有 2 个制表符分隔的数据框作为输入; dataframe1 包含所有主题组合的列表,如下所示:
MotifCombID Motif1 Motif2 Motif3
1 Sp1 YY1 NFY
2 Sp1 YY1 KLF5
3 Sp1 YY1 ETS
Dataframe2 包含每个字符串的所有主题出现,如下所示:
StringID Sp1 YY1 NFY KLF5 ETS
1 2 3 4 1 3
2 0 1 0 2 0
3 0 0 2 1 5
4 1 0 1 0 0
我真正想做的是使用 df2 中的数据计算 df1 中列出的图案/图案组合(例如,组合 1:Sp1、YY1、NFY),用于 df1 中列出的所有组合。
所以我需要 1) 搜索 df1 中的主题名称是否与 df2 中的主题名称匹配;
2) 如果是,则检索所有列;
3) 将每一行中的值相乘,然后将所有值相加;
4) 返回该主题组合的“频率”(步骤 3 的结果)。
例如:
对于 MotifCombID 1 (Sp1, YY1, NFY) = (2*3*4)+(0*1*0)+(0*0*2)+(1*0*1) = 24
对于 MotifCombID 2 (Sp1, YY1, KLF5) = (2*3*1) + (0*1*2) + (0*0*1)+(1*0*0) = 6
对于 MotifCombID 3 (Sp1, YY1, ETS) = (2*3*3) + (0*1*0) + (0*0*5)+(1*0*0) = 18
等等……
这些数据帧相当大(df1:57155 x 3,df2:71 个图案 x 99583 个字符串),所以我想以一种计算效率高的方式来执行此操作。
非常感谢您提供的任何帮助或指导我从哪里开始!
【问题讨论】:
-
如果您显示这个虚拟示例的预期输出会更清楚......
-
当然!对于组合 1 (Sp1, YY1, NFY) = (2*3*4)+(0*1*0)+(0*0*2)+(1*0*1) = 24 对于组合 2 (Sp1, YY1, KLF5) = (2*3*1) + (0*1*2) + (0*0*1)+(1*0*0) = 6 对于组合 3 (Sp1, YY1, ETS) = ( 2*3*3) + (0*1*0) + (0*0*5)+(1*0*0) = 18 等等...
-
如果您是 R 的初学者,可能仍然是时候切换到 python + pandas。当您想使用与 R 接口的易于实现的数据分析包时,R 很有用,但是如果您想编写自己的方法,从长远来看,python 可能会不那么令人沮丧。
-
谢谢!你是过去 24 小时内第二个告诉我这个的人,肯定会为此付出努力。数据可视化/绘图呢?你认为 python 会像 R 一样优秀和友好吗?
标签: r pattern-matching combinations bioinformatics combinatorics