11

n 行と 3 のデータフレームがあります

df <- data.frame(start=c(178,400,983,1932,33653),
    end=c(5025,5025, 5535, 6918, 38197),
    group=c(1,1,2,2,3))

df
  start   end group
1   178  5025     1
2   400  5025     1
3   983  5535     2
4  1932  6918     2
5 33653 38197     3

df$group2重複するグループを同じものに再分類する新しい列を作成したいと考えています。たとえば、df$group[df$group==1]は 178 で始まり 5025 で終わります。これdf$group[df$group==2]は、983 で始まり 6918 で終わる と重複します。グループ 1 と 2 をグループ 1 として分類する新しい列を作成したいと思います (その後、グループ 3 をグループとして分類します)。 2)。

結果:

df
  start   end group group2
1   178  5025     1      1
2   400  5025     1      1
3   983  5535     2      1
4  1932  6918     2      1
5 33653 38197     3      2

助けてくれてありがとう。

4

2 に答える 2

14

IRangesパッケージが必要です:

require(IRanges)
ir <- IRanges(df$start, df$end)
df$group2 <- subjectHits(findOverlaps(ir, reduce(ir)))
> df

#  start   end group group2
# 1   178  5025     1      1
# 2   400  5025     1      1
# 3   983  5535     2      1
# 4  1932  6918     2      1
# 5 33653 38197     3      2

をインストールするIRangesには、R で次の行を入力します。

source("http://bioconductor.org/biocLite.R")
biocLite("IRanges")

詳細 (マニュアルなど) については、こちらを参照してください。

于 2013-03-05T23:07:29.247 に答える