连续超过R的阈值和附加条件

林兹

我想使用R获得满足以下条件的时间序列中的时间步长(应该是满足以下条件的第一时间步长):

[1] V1 > 0 at the time step
[2] V1 > 0 in at least 3 consecutive time steps from the timestep obtained in [1]
[3] Accumulated value of the next four timesteps following [1] should be greater than 1.

这是数据

structure(list(V1 = c(-3.85326, -2.88262, -4.1405, -3.95193, 
-6.68925, -2.04202, -2.47597, -4.91161, -2.5946, -2.82873, 2.68839, 
-4.1287, -4.50296, -0.143476, -1.12174, -0.756168, -1.67556, 
-1.92704, -1.89279, -2.37569, -5.71746, -2.7247, -4.12986, -2.29769, 
-1.52835, -2.63623, -2.31461, 2.32796, 4.14354, 4.47055, -0.557311, 
-0.425266, -2.37455, -5.97684, -5.22391, 0.374004, -0.986549, 
 2.36419, 0.218283, 2.66014, -3.44225, 3.46593, 1.3309, 0.679601, 
 5.42195, 10.6555, 8.34144, 1.64939, -1.64558, -0.754001, -4.77503, 
-6.66197, -4.07188, -1.72996, -1.15338, -8.05588, -6.58208, 1.32375, 
-3.69241, -5.23582, -4.33509, -7.43028, -3.57103, -10.4991, -8.68752, 
-8.98304, -8.96825, -7.99087, -8.25109, -6.48483, -6.09004, -7.05249, 
-4.78267)), class = "data.frame", row.names = c(NA, -73L))

到目前为止我有什么

我能够组合条件1和2。这是脚本。

first_exceed_seq <- function(x, thresh = 0, len = 3)
{

# Logical vector, does x exceed the threshold
exceed_thresh <- x > thresh

# Indices of transition points; where exceed_thresh[i - 1] != 
exceed_thresh[i]
transition <- which(diff(c(0, exceed_thresh)) != 0)

# Reference index, grouping observations after each transition
index <- vector("numeric", length(x))
index[transition] <- 1
index <- cumsum(index)

# Break x into groups following the transitions
exceed_list <- split(exceed_thresh, index)

# Get the number of values exceeded in each index period
num_exceed <- vapply(exceed_list, sum, numeric(1))

# Get the starting index of the first sequence where more then len 
exceed thresh
transition[as.numeric(names(which(num_exceed >= len))[1])]
}

然后,使用上面的函数,只需键入:

first_exceed_seq(dat[,1])

得出28。这应该是正确的答案,但是我想知道以下问题。

问题

1)我想在上面的函数中添加第三个条件,以使29到32的总和大于1。从上面的函数中,我将最小长度设置为3。我将把它应用于多个时间序列,可能会遇到具有四个或四个以上连续正值的时间序列,并且由此产生的第一个时间步不满足[3],而是第二个或第三个时间步等。

关于如何执行此R有任何建议吗?我将不胜感激。

更新:我尝试了下面的解决方案,但dplyr发出警告消息。

1:在filter_impl(.data,quo)中:强制执行的混合评估lead请使用dplyr :: lead()或library(dplyr)删除此警告。

同样正确的答案应该是28,因为它首先满足所有三个条件。

塞特

这是使用dplyr包和lead功能的解决方案在以下代码中,x是您提供的数据:

library(dplyr)
newx <- x %>% as_tibble() %>%
  mutate(time = 1: n()) %>%  
  filter(V1 > 0, lead(V1, 1) > 0, lead(V1, 2) > 0,
         lead(V1, 1) + lead(V1, 2) + lead(V1, 3) + lead(V1, 4) > 1)
# A tibble: 7 x 2
      V1   idx
   <dbl> <int>
1  2.33     28
2  2.36     38
3  3.47     42
4  1.33     43
5  0.680    44
6  5.42     45
7 10.7      46

如果只希望第一次出现,可以使用slice

slice(newx, 1)
    # A tibble: 1 x 2
     V1   idx
  <dbl> <int>
1  2.33    28

关于错误:dplyr像我一样包含软件包,或替换leadfilter::lead

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每个附加条件

来自分类Dev

如何以最小和附加条件优化LINQ

来自分类Dev

JOIN中的附加条件

来自分类Dev

分区结束的附加条件

来自分类Dev

包括脚本的附加条件

来自分类Dev

R:如果差异超过阈值,则累积和

来自分类Dev

R-带有附加条件的方程式。矢量条件

来自分类Dev

您如何给关联附加条件?

来自分类Dev

Python列表理解中的附加条件

来自分类Dev

QueryDSL Left Join的附加条件为ON

来自分类Dev

根据附加条件构造可变滞后

来自分类Dev

SQL联接中的附加条件

来自分类Dev

带有附加条件的MAX

来自分类Dev

使用swtich添加附加条件

来自分类Dev

INNER JOIN之后的mysql附加条件

来自分类Dev

如果并附加条件熊猫数据框?

来自分类Dev

每个ID超过阈值的连续观测的最大连续值

来自分类Dev

HQL等效于LEFT JOIN中的附加条件

来自分类Dev

具有附加条件的SQL Relational Division

来自分类Dev

在laravel 5.3中添加登录的附加条件

来自分类Dev

筛选出递减值的细分(带有附加条件)

来自分类Dev

BlockingCollection <T> .GetConsumingEnumerable()在附加条件下阻塞

来自分类Dev

php while循环附加条件不符合预期

来自分类Dev

向MySQL查询添加附加条件

来自分类Dev

MySQL用附加条件找到最小未使用值

来自分类Dev

带有附加条件的左连接的mysql计数

来自分类Dev

三元运算符中的附加条件

来自分类Dev

高于阈值的连续值的位置和值

来自分类Dev

在原始帖子“ R-生成二进制向量的所有可能的成对组合”中添加一个附加条件