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

Cos*_*Cos 4 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)
Run Code Online (Sandbox Code Playgroud)

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

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

Gre*_*gor 8

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

sum(rle(x & y)$values)
Run Code Online (Sandbox Code Playgroud)

几个例子:

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
Run Code Online (Sandbox Code Playgroud)

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