在数据框中将重叠范围合并到唯一组中

时间:2013-03-05 23:01:10

标签: r dataframe data.table range overlap

我有一个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]重叠,从{9}开始,到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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分: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")

要了解更多信息(手册等),请转到here

答案 1 :(得分:0)

我认为function onOpen(e) { // Generate Form Number then add to Form Description var str1 = Math.round(Math.random()*10000) + '0000'; var str2 = Math.round(Math.random()*10000) + '0000'; var formNumber01 = str1.slice(0,4); var formNumber02 = str2.slice(0,4); var formNumber = 'Unique Form # ' + formNumber01 + "-" + formNumber02; // Identify active form var form = FormApp.getActiveForm(); // Add Form Number to Form Description form.setDescription(formNumber); // entry.1542424645() } 可以实现:

data.table::foverlaps