1

SummarizedExperiment があります (ただし、GRanges と見なすことができます)。私が望むのは、間隔の数を減らし、同一の隣接するすべての行に対して1行のみを保持することですmcol(gr)。重要なのは、新しい拡張間隔も追跡することです。

どうもありがとう!

gr <- GRanges(
seqnames = Rle(c("chr1"), c(12)),
ranges = IRanges(1:12*10, end = 1:12*10+5),
state1 = c(1,1,1,1,2,3,4,5,5,5,1,1),
state2 = c(1,1,1,2,2,2,5,5,6,6,1,1))

結果の GRanges は次のようになります。

gr2 <- GRanges(
  seqnames = Rle(c("chr1"), c(8)),
  ranges = IRanges(start = c(10,40,50,60,70,80,90,110),
  end =  c(35,45,55,65,75,85,105,125)),
  state1 = c(1,1,2,3,4,5,5,1), state2 = c(1,2,2,2,5,5,6,1))​  

編集:状態ペアが隣接していない間隔にも存在するように、Granges を編集しました (この 2 番目の 1,1 ペアは、最初のペアとは別に報告する必要があります) 申し訳ありませんが、私の最初の解決策も間違っていました!

どうもありがとう!

4

1 に答える 1

2

人為的な要因を作成し、レベルが (デフォルトのアルファベット順ではなく) 要因の発生順序になっていることを確認して、GRanges の再配置を回避し、GRangesオブジェクトを分割します。

f0 = paste(gr$state1, gr$state2, sep=".")
f = factor(f0, levels=unique(f0))
grl = split(gr, f)

範囲と関連するメタデータを取得する

grf = unlist(range(grl), use.names=FALSE)
mcols(grf) = mcols(gr)[!duplicated(f),]

split()range()、およびunlist()このサイズのデータ​​ではすべて「高速」である必要があります。

染色体でも分割するには、それを因子に追加します

f0 = paste(seqnames(gr), gr$state1, gr$state2, sep=".")

他の方法で分割するには、たとえば、状態が隣接している場合にのみ、適切な因数を作成する方法を見つけます。たとえば、

f0 = paste(
    seqnames(gr),
    cumsum(c(TRUE, diff(gr$state1) != 0)),
    cumsum(c(TRUE, diff(gr$state2) != 0)),
    sep=".")

Bioconductorサポート サイトで、Bioconductor パッケージに関する質問をしてください。

于 2016-09-08T23:22:34.807 に答える