我需要找到連續幾天我的數據達到閾值的位置。我正在尋找高於閾值的4個連續觀察值。我想返回符合這些標準的系列的第一個觀察點的位置。連續值高於閾值的位置和值
下面是一個例子的數據集:
eg = structure(list(t.date = structure(c(1L, 2L, 11L, 12L, 13L, 14L,
15L, 16L, 17L, 18L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), .Label = c("4/30/11",
"5/1/11", "5/10/11", "5/11/11", "5/12/11", "5/13/11", "5/14/11",
"5/15/11", "5/16/11", "5/17/11", "5/2/11", "5/3/11", "5/4/11",
"5/5/11", "5/6/11", "5/7/11", "5/8/11", "5/9/11"), class = "factor"),
t.avg = c(4L, 4L, 5L, 6L, 10L, 18L, 18L, 18L, 18L, 12L, 10L,
10L, 8L, 8L, 9L, 10L, 6L, 5L)), .Names = c("date", "avg"
), row.names = c(NA, -18L), class = "data.frame")
我想去的地方平均滿足標準(平均> 17 4天)的時間 一種方法:
eg$date %in% eg$date[which(eg$avg > 17)]
# [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
# [13] FALSE FALSE FALSE FALSE FALSE FALSE
在這種情況下,我可以採取第一個案例TRUE
作爲答案,但如果第二,第三或第四個不是TRUE
我需要在第一次約會中條件TRUE
:
eg$date[which(eg$avg > 17)]
# [1] 5/5/11 5/6/11 5/7/11 5/8/11
而且先觀察該系列中的位置:
which(eg$avg > 17)
# [1] 6 7 8 9
我發現相關問題,但我一直無法彎曲我需要的方法。
非常感謝。使用基礎R
難道不應該如果存在這樣的功能,就是'rollmin'。或者也許rollapply(...,分,4) – 2014-11-22 00:13:23
好抓!我對這個字段名稱是「平均」而感到困惑,並且一直跟着它。我編輯以反映您的評論。 – Jordan 2014-11-22 00:29:31
'rollmax'存在如此:'which(-rollmax(-eg $ avg,4)> 17)[1]' – 2014-11-22 13:53:00