设置聚合函数的起始位置?

时间:2016-09-02 17:17:47

标签: r

我使用startend列计算数据中每个100kb部分(分档)的出现次数。我已将aggregate用于此目的。

数据样本:

    chr   start    end   length  abs_summit pileup   X.log10.pvalue. fold_enrichment
1  chr1   10004   10586    583      10076    288       262.84540        19.37227
2  chr1   28946   29387    442      29309     59        37.01597         8.33123
3  chr1  384456  386620   2165     385473     38        30.88671        10.66657
4  chr1  544777  546003   1227     545467     46        29.03529         7.95905
5  chr1  546962  547834    873     547696     37        21.86056         6.93344
6  chr1  564682  565377    696     565177   2396       801.42346         4.73626
7  chr1  565647  565859    213     565768   2225       677.54956         4.33460
8  chr1  566082  566749    668     566207   2363       767.32574         4.60286
9  chr1  567264  567682    419     567385   2559       900.85590         4.98421
10 chr1  569289  569585    297     569395   1994       535.04041         3.88158
11 chr1  603864  605365   1502     604917     28        20.02823         8.06871
12 chr1  713780  714492    713     714122     80        62.03205        12.10543
13 chr1  726303  726397     95     726331     35        20.22534         6.65208
14 chr1  726902  727015    114     726956     38        23.21246         7.27584
15 chr1  762303  763398   1096     762976     50        28.46482         7.09851
16 chr1  894589  894800    212     894677     58        28.29763         6.05185
17 chr1  912206  912835    630     912372     60        25.23332         5.16066
18 chr1 1013683 1014743   1061    1013926     67        28.39317         5.28122
19 chr1 1051254 1052109    856    1051607     76        45.31027         8.12284
20 chr1 1092833 1093509    677    1092949     50        21.65445         5.17642

每个100kb生成垃圾箱的代码:

normal_count1 = aggregate(end ~ chr + start%/%100000, data=normal, FUN=length)

结果是:

       chr   x100Kb   occurrences_norm  
1      chr1     0             2
39     chr1     3             1
56     chr1     5             7
67     chr1     6             1
79     chr1     7             4
91     chr1     8             1
102    chr1     9             1

其中x100kb是二进制数。

但是,我想在位置50000处添加一个新的“阅读框”(所以第1号文件夹从50kb到150kb,第2号文件夹从150到250等)。我已经尝试过再次使用aggregate,但这没有用(我认为它的起始值增加了50000):

normal_count2 = aggregate(end ~ chr + (start+50000)%/%100000, data=normal, FUN=length)

有没有办法用aggregate执行此操作,还是应该使用更合适的函数?

1 个答案:

答案 0 :(得分:0)

我还没有弄清楚你看到的问题,而是试图按照你想要的描述。我使用了一个修改过的数据集,其数值跨越了第一个所需的边界:

normal <-   read.table(text="  chr   start    end   length  abs_summit pileup   X.log10.pvalue. fold_enrichment
1  chr1   10004   10586    583      10076    288       262.84540        19.37227
2  chr1   28946   29387    442      29309     59        37.01597         8.33123
3  chr1  49999  386620   2165     385473     38        30.88671        10.66657
4  chr1  50000  546003   1227     545467     46        29.03529         7.95905
5  chr1  50001  547834    873     547696     37        21.86056         6.93344
6  chr1  564682  565377    696     565177   2396       801.42346         4.73626
7  chr1  565647  565859    213     565768   2225       677.54956         4.33460
8  chr1  566082  566749    668     566207   2363       767.32574         4.60286
9  chr1  567264  567682    419     567385   2559       900.85590         4.98421
10 chr1  569289  569585    297     569395   1994       535.04041         3.88158
11 chr1  603864  605365   1502     604917     28        20.02823         8.06871
12 chr1  713780  714492    713     714122     80        62.03205        12.10543
13 chr1  726303  726397     95     726331     35        20.22534         6.65208
14 chr1  726902  727015    114     726956     38        23.21246         7.27584
15 chr1  762303  763398   1096     762976     50        28.46482         7.09851
16 chr1  894589  894800    212     894677     58        28.29763         6.05185
17 chr1  912206  912835    630     912372     60        25.23332         5.16066
18 chr1 1013683 1014743   1061    1013926     67        28.39317         5.28122
19 chr1 1051254 1052109    856    1051607     76        45.31027         8.12284
20 chr1 1092833 1093509    677    1092949     50        21.65445         5.17642
", header=TRUE)
normal$bin=(normal$start+50000)%/%100000
normal$bin=(normal$start+50000)%/%100000
(normal_count1 = aggregate(end ~ chr + bin, data=normal, FUN=length))
#---
   chr bin end
1 chr1   0   3
2 chr1   1   2
3 chr1   6   6
4 chr1   7   3
5 chr1   8   1
6 chr1   9   2
7 chr1  10   1
8 chr1  11   2

如果问题出现在&#34; 0&#34; -bin,那么需要进行子集化,而aggregate.formula函数确实有一个&#39;子集&#39;参数,所以它只是:normal_count1 = aggregate(end ~ chr + bin, data=normal, FUN=length, subset= (start >= 50000) )