R/TIBLE-满足可变条件的子集时间序列?

R/TIBLE-满足可变条件的子集时间序列?,r,time-series,tidyverse,tibble,R,Time Series,Tidyverse,Tibble,如何对从启动到满足条件的变量首次出现的时间序列进行子集划分 tribble( ~t, ~x, ~y, as.POSIXct(strptime("2011-03-27 01:30:00", "%Y-%m-%d %H:%M:%S")), -1, 1, as.POSIXct(strptime("2011-03-27 01:30:01", "%Y-%m-%d %H:%M:%S")), -5, 2, as.POSIXct(strptime("2011-03-27 03:45:00", "%

如何对从启动到满足条件的变量首次出现的时间序列进行子集划分

tribble(
  ~t, ~x, ~y,
  as.POSIXct(strptime("2011-03-27 01:30:00", "%Y-%m-%d %H:%M:%S")), -1, 1,
  as.POSIXct(strptime("2011-03-27 01:30:01", "%Y-%m-%d %H:%M:%S")), -5, 2,
  as.POSIXct(strptime("2011-03-27 03:45:00", "%Y-%m-%d %H:%M:%S")), -3, 5,
  as.POSIXct(strptime("2011-03-27 04:20:00", "%Y-%m-%d %H:%M:%S")), -8, 3,
  as.POSIXct(strptime("2011-03-27 04:25:00", "%Y-%m-%d %H:%M:%S")), -2, 8
)
例如,
y>4
从开始到第一次出现的所有行(应为示例数据的前三行)

h3rm4ns解决方案说明

不包括与条件匹配的第一行的简单情况如下:

 %>% filter(cumsum(y > 4) == 0)
y>4
将为false,在R中等于
0
,因此
cumsum==0
将为所有行返回
TRUE
(并因此进行筛选),直到与
y>4
匹配的第一行,并因此向总和添加
1


为了让它包含匹配行,我们另外
lag(y,default=0)

您可以执行以下操作:

df %>% filter(!cumsum(lag(y, default = 0) > 4))
结果是:

# A tibble: 3 x 3
                    t     x     y
               <dttm> <dbl> <dbl>
1 2011-03-27 01:30:00    -1     1
2 2011-03-27 01:30:01    -5     2
3 2011-03-27 03:45:00    -3     5
#一个tible:3 x 3
t×y
1 2011-03-27 01:30:00    -1     1
2 2011-03-27 01:30:01    -5     2
3 2011-03-27 03:45:00    -3     5