[英]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.