R 计算两个逻辑向量中第一个逻辑向量中每运行1s的交点

R 计算两个逻辑向量中第一个逻辑向量中每运行1s的交点,r,range,intersection,interval-intersection,R,Range,Intersection,Interval Intersection,这个问题的一个更一般的版本已经得到了回答。一位用户建议我将这个问题的更具体版本作为一个单独的帖子来提问 我有两个逻辑向量,如下所示: x = c(0, 0, 0, 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) 我希望以这样的方式计算连续值范围(在本例中为1111)之间的交点,即在第一个向量中,每运行1次最多计算一个交点 使用上述答案中的sum(rle(x&y)$values),我可以将上述

这个问题的一个更一般的版本已经得到了回答。一位用户建议我将这个问题的更具体版本作为一个单独的帖子来提问

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

x = c(0, 0, 0, 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)
我希望以这样的方式计算连续值范围(在本例中为1111)之间的交点,即在第一个向量中,每运行1次最多计算一个交点


使用上述答案中的
sum(rle(x&y)$values)
,我可以将上述向量的交点总数计算为两个,但我希望是一个。

是否希望交点的最大长度为1。如果是这样,你可以这样做

sum(with(rle(x & y), lengths == 1 & values))
#[1] 1

执行
x&y
时,
x
y
的数值将更改为逻辑值,其中1表示为
TRUE
,而
FALSE
表示为0。由于我们只对1(即
TRUE
)与最多1个交点的交点感兴趣,因此我们计算满足此条件的次数,即
长度==1
(或
长度是否希望交点的最大长度为1。如果是,您可以这样做

sum(with(rle(x & y), lengths == 1 & values))
#[1] 1

当我们执行
x&y
时,
x
y
的数值将更改为逻辑值,其中1表示为
TRUE
,而
FALSE
表示为0。因为我们只对1的交集感兴趣(即
TRUE
)对于最多1个交点,我们计算满足此条件的次数,即
长度==1
(或
长度),我们也可以将其写成

sum(with(rle(x & y), lengths * values) == 1)
#[1] 1

我们也可以把它写成

sum(with(rle(x & y), lengths * values) == 1)
#[1] 1