在R中向量中找到从正到负切换的最快方法

时间:2016-01-26 20:06:15

标签: r

我有一个包含正值和负值的向量。例如

之类的东西

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循环。

2 个答案:

答案 0 :(得分:3)

我认为这应该有效:

+(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

答案 1 :(得分:2)

这是一种方式:

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

......结果比我预期的更令人费解。