我有一个包含正值和负值的向量。例如
之类的东西 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循环。
答案 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
......结果比我预期的更令人费解。