在两个逻辑向量中的第一个中计算每1s的交叉点数

问题描述 投票:0回答:2

此问题的更一般版本已回答here。一位用户建议我在单独的帖子中问这个问题的更具体版本。

我有两个看起来像这样的逻辑矢量:

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)之间的交点,使得在第一个向量中每运行1s最多计数一个交点。

使用上面提到的答案中的sum(rle(x & y)$values),我可以将上述向量的相交总数算作two,但我希望one

r range intersection interval-intersection
2个回答
2
投票

您希望相交的最大长度为1。如果是,则可以这样做

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

[当我们执行x & y时,xy的数值将更改为逻辑值,其中1表示为TRUEFALSE表示为0。由于我们只对1的交集感兴趣(即, TRUE)最多具有1个交集,我们计算满足此条件的次数,即lengths == 1(或lengths <= 1,因为我们最多需要检查),而values仅表示1,即TRUE


0
投票

我们也可以写成

sum(with(rle(x & y), lengths * values) == 1)
#[1] 1
© www.soinside.com 2019 - 2024. All rights reserved.