Сделать окно вокруг позиции и получить значения из другого data.frame для бинов указанного окна

Я хотел бы взять "start_position" для каждого гена в моем data.frame и нарисовать окно из 100000 базисов вверх по течению и 100000 базисов вниз по течению (каждое в 200 базовых окнах, так что 500 окон вверх / вниз по течению от "start_position") и пересекаются окно с объектом granges, у которого есть столбец оценки, соответствующий 200 позициям базовой корзины.

Ген data.frame выглядит так:

> head(gene)
  ensembl_transcript_id length eff_length est_counts         tpm    ensembl_gene_id mgi_symbol start_position end_position strand chromosome_name
1    ENSMUST00000000001   3262       3063   7876.000  78.1469000 ENSMUSG00000000001      Gnai3      107910198    107949064      -            chr3
2    ENSMUST00000000003    902        703      0.000   0.0000000 ENSMUSG00000000003       Pbsn       75083240     75098962      -            chrX
3    ENSMUST00000000010   2574       2375    502.564   6.4310300 ENSMUSG00000020875      Hoxb9       96132771     96137909      +           chr11
4    ENSMUST00000000028   2143       1944    570.259   8.9151500 ENSMUSG00000000028      Cdc45       18780540     18812080      -           chr16
5    ENSMUST00000000033   3708       3509  26338.300 228.1170000 ENSMUSG00000048583       Igf2      149836673    149852721      -            chr7
6    ENSMUST00000000049   1190        991      3.000   0.0920027 ENSMUSG00000000049       Apoh      108204668    108275710      +           chr11

Объект granges выглядит так:

> score_data
UCSC track 'MEF_K27AC.downsampled.sorted'
UCSCData object with 13274466 ranges and 1 metadata column:
             seqnames               ranges strand |     score
                <Rle>            <IRanges>  <Rle> | <numeric>
         [1]     chr1          [  1,  200]      * |         0
         [2]     chr1          [201,  400]      * |         0
         [3]     chr1          [401,  600]      * |         0
         [4]     chr1          [601,  800]      * |         0
         [5]     chr1          [801, 1000]      * |         0
         ...      ...                  ...    ... .       ...
  [13274462]     chrY [15901401, 15901600]      * |         0
  [13274463]     chrY [15901601, 15901800]      * |         0
  [13274464]     chrY [15901801, 15902000]      * |         0
  [13274465]     chrY [15902001, 15902200]      * |         0
  [13274466]     chrY [15902201, 15902400]      * |         0
  -------
  seqinfo: 21 sequences from mm9 genome​

Цель здесь состоит в том, чтобы вычислить для каждого гена TSS (start_position), получить значения оценок, которые находятся в восходящем и нисходящем 500 окнах. Я хотел бы добавить эти окна в качестве столбцов в ген data.frame возможно. В идеале я хотел бы, чтобы данные в некоторой форме напоминали:

ensembl_transcript_id   tpm upstream_500    upstream_499    …   downstream_499  downstream_500
1   ENSMUST00000000001  78.1469 




2   ENSMUST00000000003  0   




3   ENSMUST00000000010  6.43103 




4   ENSMUST00000000028  8.91515 




5   ENSMUST00000000033  228.117 




6   ENSMUST00000000049  0.0920027   

Любая помощь приветствуется. Я разместил ссылки на данные и текущий код ниже:

Ген data.frame (это можно прочитать в коде как переменную exp)

Оценка объекта (это можно прочитать в коде как переменную mef_chip)

Текущий код, который должен работать с входами выше

0 ответов

Другие вопросы по тегам