我有第一个向量,假设 x 仅由 1 和 -1 组成。然后,我有第二个向量 y,它由 1、-1 和 0 组成。现在,我想创建一个向量 z,其中包含索引 i a 1 ifx[i]
等于 1 并且 1 存在于 n 个先前元素之间的向量 y 内(y[(i-n):i])
...
更正式地说:z <- ifelse(x == 1 && 1 %in% y[(index(y)-n):index(y)],1,0)
我希望在 R 中创建这样一个向量,而不需要循环或递归。上面的命题不起作用,因为它不承认采用表达式y[(index(y)-n):index(y)]
逐个元素。
多谢您的支持
这是一种使用的方法cumsum
函数来测试到目前为止已经看到的数量。如果位置上的个数i
大于该位置的个数i-n
,则满足右边的条件。
## Generate some random y's.
> y <- sample(-1:1, 25, replace=T)
> y
[1] 0 1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 0 0 -1 -1 -1 1 -1 1 1 0 0 0 1
> n <- 3
## Compute number of ones seen at each position.
> cs <- cumsum(ifelse(y == 1, 1, 0))
> lagged.cs <- c(rep(0, n), cs[1:(length(cs)-n)])
> (cs - lagged.cs) > 0
[1] FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
[25] TRUE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)