【问题标题】:R / tibble - subset time series up to variable condition met?R / tibble - 满足可变条件的子集时间序列?
【发布时间】:2018-05-16 07:11:37
【问题描述】:

如何对从开始到第一次出现满足条件的变量的时间序列进行子集化?

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)

【问题讨论】:

    标签: r time-series tidyverse tibble


    【解决方案1】:

    您可以执行以下操作:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 2021-06-09
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2018-02-26
      相关资源
      最近更新 更多