2016-09-02 2 views
0

Я подсчитываю количество вхождений для каждой секции 100kb (бункеров) в моих данных, используя start и end столбцы. Для этой цели я использовал 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 будет идти от 50 кб до 150 кб, номер ячейки 2 от 150 до 250 и т. Д.). Я попытался с помощью aggregate снова, но это не сработало (это добавление 50000 до начального значения, я думаю):

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

Есть ли способ сделать это с aggregate или есть еще наши правила функцию, которую я должен использовать?

+0

Непонятно, что вы задаете –

+0

Я отредактировал вопрос, надеюсь, теперь будет более ясно. В принципе, я хотел бы подсчитать количество строк в каждом ящике для каждой хромосомы, как это было в примере; но вместо того, чтобы начинать с первого бина в 'start = 0'; Я хотел бы начать делать бункеры в 'start = 50000'. –

+0

Вы пытались подмножество данных? 'aggregate (end ~ chr + start% /% 100000, data = normal [normal $ start> 50000,], FUN = length)' –

ответ

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 

Если проблема появления «0» -bin тогда Подменит необходимо и функция aggregate.formula действительно есть «подмножество» аргумент, так что это было бы просто: normal_count1 = aggregate(end ~ chr + bin, data=normal, FUN=length, subset= (start >= 50000))

+0

Это делает. Я думаю, проблема в том, что я не создавал новый столбец ('$ bin') и вместо этого менял значение' start'? Большое спасибо! –

Смежные вопросы