1

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

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将是假的,等于0R 中的,因此cumsum == 0将返回TRUE(并因此过滤)所有行,直到第一个匹配的行y > 4,因此将 a 添加 1到总和中。

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

4

1 回答 1

2

您可以执行以下操作:

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
于 2017-12-02T08:29:44.080 回答