基于前一行的R中的逻辑向量

时间:2013-07-16 10:27:29

标签: r

我想根据前一行中的值选择向量的子集。这是没有循环的可能吗?更具体地说,使用时间序列表示法(我编写了第二行),我希望得到y

x = c(-2,3,-1,2,8,)
y = x(t)[x(t)>0, x(t-1)<0, x(t)-x(t-1)>2]
y  
[1] 3

我真的不需要y的解决方案,因为我总是可以循环它。但是非常有兴趣知道是否存在移位运算符或类似的逻辑向量索引

3 个答案:

答案 0 :(得分:1)

我不确定你在找什么。但出于这个简单的目的,您可以使用:

x <- c(-2,3,-1,2,8)
x1 <- x[-length(x)]
z <- x[-1]
y <- z[z>0 & x1<0 & (z-x1)>2]
y

对于许多'x(t-i)'的操作,我不知道一种优雅的方式,但你可以尝试将uggly代码包装在一个函数中,然后只需调用fts(x)

fts <- function(x){
  xmat <- sapply(1:10,function(i){
    x[-1:i]

  })
......
}

此外,对于'x(t)-x(t-1)',您可以使用diff(x);对于x(t)-x(t-i),您可以使用diff(x,lag=i)

答案 1 :(得分:0)

与其他答案没什么不同,但更紧凑:

x[x > 0 & 
    c(FALSE, head(x,-1) < 0) & 
    c(FALSE, diff(x) > 2)]

答案 2 :(得分:0)

这是我发现要完成我喜欢的事情

x = c(-2,3,-1,2,8)
x = zoo(x)
y = x[x>0 & lag(x,-1)<0 & (x-lag(x,-1))>2]
y
2 4 
3 2 

它非常优雅地处理lag(x,-i)而无需调整矢量