我需要找出一个变量的实例在另一个变量的两个实例之间发生了多少次。鉴于数据:
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()
的第一个参数划分了窗口,我可以在其中检查第二个参数中是否发生了任何事情。请注意,输出不应区分每个窗口内发生一次或两次的事件,而应计算发生一个或多个事件的窗口数。
答案 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