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

Intersecting ranges of consecutive values in logical vectors in R

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

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)被视为一个范围。所以在上面的例子中,每个向量包含一个 1 的范围,并且这些范围只相交一次。

是否有任何适用于范围交叉点的 R 包可以帮助解决这个问题?

我认为这应该可行(调用您的逻辑向量 xy):

sum(rle(x & y)$values)

举几个例子:

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 计数。