微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

识别 R 中的重叠数字范围

如何解决识别 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,2012)
1 & 3 overlapped 4 years (2011,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。