如何解决识别 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 举报,一经查实,本站将立刻删除。