R中逻辑向量中连续值的相交范围

R中逻辑向量中连续值的相交范围,r,range,interval-intersection,R,Range,Interval Intersection,我有两个逻辑向量,如下所示: x = c(0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0) y = c(0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0) 我想计算连续值范围之间的交点。这意味着连续值(1s)作为一个范围处理。所以在上面的例子中,每个向量包含一个1s的范围,这些范围只相交一次 是否有任何适用于范围交叉口的R程序包可以在这里提供帮助?我认为这应该可以(调用逻辑向量x和y): 举几个例子: x = c(0, 0, 0, 1, 1

我有两个逻辑向量,如下所示:

x = c(0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
y = c(0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0)
我想计算连续值范围之间的交点。这意味着连续值(1s)作为一个范围处理。所以在上面的例子中,每个向量包含一个1s的范围,这些范围只相交一次

是否有任何适用于范围交叉口的R程序包可以在这里提供帮助?

我认为这应该可以(调用逻辑向量
x
y
):

举几个例子:

x = c(0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
y = c(0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0)
sum(rle(x & y)$values)
# [1] 1

x = c(1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
y = c(0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0)
sum(rle(x & y)$values)
# [1] 2

x = c(1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0)
y = c(0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0)
sum(rle(x & y)$values)
# [1] 3

作为解释,
x&y
给出了每个元素级别的交叉点,
rle
折叠相邻交叉点的运行,以及
sum
计数。

这是一个很好的答案,谢谢!知道我能不能只计算第一个向量的交点吗?例如x=c(0,1,1,1,1,1,1,1,1,1,0,0,0),y=c(0,0,0,1,1,1,0,0,0,0,1,1,0)会导致“1”相交,这几乎不那么容易。。。至少用这种方法是不行的。我建议问一个新问题。我还建议将其表述为“在第一个向量中,每运行1次最多计算一个交点”——这似乎更清楚。
x = c(0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
y = c(0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0)
sum(rle(x & y)$values)
# [1] 1

x = c(1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
y = c(0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0)
sum(rle(x & y)$values)
# [1] 2

x = c(1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0)
y = c(0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0)
sum(rle(x & y)$values)
# [1] 3