[英]R / tibble - subset time series up to variable condition met?
如何對從開始到滿足條件的變量的首次出現之間的時間序列進行子集化?
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
將對所有與y > 4
匹配的行返回TRUE
(並進行過濾),因此將總cumsum == 0
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.