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

4

我有两个逻辑向量,看起来像这样:

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)

我想计算连续值范围之间的交叉点。这意味着连续值(1的值)被处理为一个范围。因此,在上面的示例中,每个向量包含一个1的范围,并且这些范围仅相交一次。

是否有任何R软件包可用于范围交集,可以帮助解决这个问题?

1个回答

8
我认为这个方法可以解决问题(将你的逻辑向量称为 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 统计数量。


这是一个很好的答案,谢谢!您有没有想过如何仅计算第一个向量的交集?例如,x = c(0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0) y = c(0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0) 将得到“1”个交集。 - Cos
不是那么容易...至少用这种方法不行。我建议你为此提出一个新问题。我还建议你把它表述为“在第一个向量的每次1运行中最多计算一个交点”,这样更清晰明了。 - Gregor Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接