基于上一行的R中的逻辑向量
我想根据上一行中的值选择向量的子集。这是没有循环就可以实现的吗?更具体地说,使用时间序列符号(我组成了第二行),我希望得到y基于上一行的R中的逻辑向量,r,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 x=c(-2,3,-1,2,8,) y=x(t)[x(t)>0,x(t-1)2] Y [1] 3 我真的不需要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
x=c(-2,3,-1,2,8,)
y=x(t)[x(t)>0,x(t-1)2]
Y
[1] 3
我真的不需要y的解决方案,因为我总是可以循环它。但是我很想知道是否有一个移位运算符或类似的东西用于逻辑向量索引我不确定您在寻找什么。但为了实现这一简单目的,您可以使用:
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)-x(t-1)
,您可以使用diff(x)
;对于x(t)-x(t-i)
您可以使用diff(x,lag=i)
与另一个答案没有太大区别,但更紧凑一些:
x[x > 0 &
c(FALSE, head(x,-1) < 0) &
c(FALSE, diff(x) > 2)]
x[x>0&
c(假,头部(x,-1)<0)和
c(错误,差异(x)>2)]
这就是我所发现的,可以实现我所希望的
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
x=c(-2,3,-1,2,8)
x=动物园(x)
y=x[x>0&滞后(x,-1)2]
Y
2 4
3 2
它非常优雅地处理滞后(x,-i),而无需调整向量的大小非常感谢您的回复,它运行良好。但是我想看看是否有一种方法可以直接在x向量上实现。因为在这个例子中,如果我需要包含x(t-2)x(t-3)。。。这将意味着定义许多其他向量,代码变得非常丑陋。我想你可以设置一个函数来包装丑陋的代码,然后在你的向量上调用该函数。duh!刚刚意识到
x[-1]
是一种更好的书写x[2:length(x)]
的方法,正如我在回答中所做的那样,同样的x[-length(x)]
对于x[1:(length(x)-1)]
@hjw,我认为这是或。您可以使用涉及多个向量的向量化方法,也可以在单个向量上使用循环调用的函数。
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