如何确定事件是否发生在另外两个事件之间

时间:2018-06-13 21:20:40

标签: r function events boundary

我需要找出一个变量的实例在另一个变量的两个实例之间发生了多少次。鉴于数据:

v <- c(1, 0, 0, 1, 0, 0, 0, 1)
w <- c(0, 0, 1, 0, 0, 0, 1, 0)
x <- c(0, 0, 0, 1, 1, 0, 0, 0)
y <- c(0, 0, 0, 0, 0, 0, 0, 0)
z <- c(0, 0, 0, 1, 0, 0, 0, 0)

我想看到这个:

some_function(v, w)
> 2

some_function(w, x)
> 1

some_function(w, y)
> 0

some_function(v, z)
> 1

这样some_function()的第一个参数划分了窗口,我可以在其中检查第二个参数中是否发生了任何事情。请注意,输出不应区分每个窗口内发生一次或两次的事件,而应计算发生一个或多个事件的窗口数。

3 个答案:

答案 0 :(得分:3)

这样的事情:

var rUsers = from u in db.Users
                        from reff in db.Referrals
                        where u.Email == reff.ReferralEmail
                        select reff;

答案 1 :(得分:2)

您可以使用按rowsum()分组的cumsum()。这应该很快。

some_function <- function(a, b) sum(rowsum(b, cumsum(a)) > 0)

some_function(v, w)
# [1] 2
some_function(w, x)
# [1] 1
some_function(w, y)
# [1] 0
some_function(w, z)  ## possible typo in question
# [1] 1
some_function(v, z)
# [1] 1

答案 2 :(得分:1)

另一种基于findInterval()的方法:

some_function <- function(x, y) {
  sum(unique(findInterval(which(y==1), which(x==1), left.open=TRUE)) != 0)
}

> some_function(v, w)
[1] 2
> some_function(w, x)
[1] 1
> some_function(w, y)
[1] 0
> some_function(w, z) # Probably a mistake in the question
[1] 1
> some_function(v, z)
[1] 1