我的目标是计算向量从正值变为负值的次数,反之亦然。例如,我会将其保存在“更改”下。例如。

randomvector <- c(0, 3, 2, -1, -4, -1, 2, 5, 8, 6, 3, 1, -2, -1, 1, 0, 3)


在这种情况下,“更改”为4(2后跟-1,-1后跟2、1后跟-2,-1后跟1)

到目前为止,这就是我所拥有的。

Point1 <- c(1:16)
Point2 <- c(2:17)

Number = 0
  if(randomvector[Point1] >0 & randomvector[Point2]) {
      Number = Number + 1
}
Number


所以从本质上讲,我的代码在说:如果randomvector的第一个值> 0,而randomvector的第二个值
这是我得到的:

Warning messages:
1: In if (randomvector[Point1] > 0 & randomvector[Point2]) { :
the condition has length > 1 and only the first element will be used

> Number
[1] 0


我了解0的输出,因为代码在if语句中遇到错误后没有运行。我也理解错误,即if语句不适用于矢量对象。我不确定该如何攻击,或者我是否正在使用最佳方法,我不确定。如果不是,请使用完全错误的方法告诉我。

谢谢 !

最佳答案

一种方法是测试连续值sign的绝对差为2

sum(abs(diff(sign(randomvector))) == 2)
# 4


以来

sign(randomvector)
# [1]  0  1  1 -1 -1 -1  1  1  1  1  1  1 -1 -1  1  0  1




diff(sign(randomvector))
# [1]  1  0 -2  0  0  2  0  0  0  0  0 -2  0  2 -1  1

10-02 06:21