我有一个向量,它包含正值和负值。例如,类似于
x = c(1,2,1,-2,-3,3,-4,5,1,1,-3)
现在我要标记向量的指数,它的值从正到负,或者从负到正。所以在上面的例子中,我想要一个像这样的索引向量
y=c(0,0,0,1,0,1,1,1,0,0,1)
我是在R
中这样做的,所以如果可能的话,我想避免使用for-循环。
发布于 2016-01-26 12:09:58
我认为这应该是可行的:
+(c(0, diff(sign(x))) != 0)
#[1] 0 0 0 1 0 1 1 1 0 0 1
all.equal(+(c(0, diff(sign(x))) != 0), y)
#[1] TRUE
发布于 2016-01-26 12:10:23
有一种方法:
yy = rep(0, length(x))
yy[with(rle(sign(x)),{ p = cumsum(c(1,lengths)); p[ -c(1,length(p)) ] })] = 1
all.equal(yy,y) # TRUE
起初,...which比我预期的要复杂得多。
https://stackoverflow.com/questions/35022895
复制