如何检测从负值到正值的变化?

时间:2018-10-10 14:21:53

标签: r diff

我已经计算出我的数据点的差并收到了这个向量:

> diff(smooth$a)/(diff(smooth$b))
 [1] -0.0099976150  0.0011162606  0.0116275973  0.0247594149  0.0213592319  0.0205187495  0.0179274056  0.0207752713
 [9]  0.0231903072 -0.0077549224 -0.0401528643 -0.0477294350 -0.0340842051 -0.0148157337  0.0003829642  0.0160912230
[17]  0.0311189830

现在,当以下三个数据点也是正数时,我想获得从负数变为正数的位置(索引)。

所以我的输出将是这样的:

> output 
 -0.0099976150 -0.0148157337

我该怎么办?

2 个答案:

答案 0 :(得分:2)

这样的一种方式:

series <- paste(ifelse(vec < 0, 0, 1), collapse = '')

vec[gregexpr('0111', series)[[1]]]
#[1] -0.009997615 -0.014815734

第一行根据数字的符号创建一个0和1的序列。在代码的第二行中,我们使用gregexpr捕获序列。最后,利用这些索引对原始向量进行子集化。

答案 1 :(得分:1)

想象一个向量z:

var file = $("#SupportDoc")[0].files[0]

那么您就可以

z <- seq(-2, 2, length.out = 20)
z
#> [1] -2.0000000 -1.7894737 -1.5789474 -1.3684211 -1.1578947 -0.9473684 -0.7368421 -0.5263158
#> [9] -0.3157895 -0.1052632  0.1052632  0.3157895  0.5263158  0.7368421  0.9473684  1.1578947
#> [17] 1.3684211  1.5789474  1.7894737  2.0000000