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 包可以帮助解决这个问题?
我认为这应该可行(调用您的逻辑向量 x
和 y
):
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
计数。
我有两个逻辑向量,如下所示:
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 包可以帮助解决这个问题?
我认为这应该可行(调用您的逻辑向量 x
和 y
):
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
计数。