【问题标题】:Identifying Overlapping Numeric Ranges in R识别 R 中的重叠数值范围
【发布时间】:2021-07-08 01:57:58
【问题描述】:

我想创建一个由相互重叠的 ID 组成的利基网络。

df <- 
  data.frame(
    id = 1:5, 
    start_year = c(2010, 2010, 2011, 2013, 2014), 
    end_year = c(2014, 2012, 2018, 2015, 2020))

  id start_year end_year
1  1       2010     2014
2  2       2010     2012
3  3       2011     2018
4  4       2013     2015
5  5       2014     2020

需要成对比较,这是我想不通的部分。对于任何 x y 比较,它看起来像这样:

1 & 2 overlapped 3 years (2010, 2011, 2012)
1 & 3 overlapped 4 years (2011, 2012, 2013, 2014)
1 & 4 overlapped 2 years (2013, 2014)
etc

对于上述 3 个示例,我所关心的只是让它一式三份:

1, 2, 3
1, 3, 4
1, 4, 2
etc 

TIA

【问题讨论】:

    标签: r graph-theory pairwise


    【解决方案1】:

    您可以使用combn来获取行的不同组合并应用以获取重叠

    result <- as.data.frame(t(apply(combn(nrow(df), 2), 2, 
                                function(x) c(id_1 = x[1],
                                              id_2 = x[2],
                                              overlap = sum(df[x[1],2]:df[x[1],3] %in% df[x[2],2]:df[x[2],3])))))
    
    result
    
       id_1 id_2 overlap
    1     1    2       3
    2     1    3       4
    3     1    4       2
    4     1    5       1
    5     2    3       2
    6     2    4       0
    7     2    5       0
    8     3    4       3
    9     3    5       5
    10    4    5       2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2015-10-15
      • 1970-01-01
      • 2020-02-05
      • 2019-02-05
      相关资源
      最近更新 更多