繁体   English   中英

识别 R 中的重叠数字范围

[英]Identifying Overlapping Numeric Ranges in R

我想创建一个相互重叠的 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

您可以使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM