私はこのようなことをします。ここで使用data.tableします。
df <- read.table(header=TRUE, text="dates temp
01/31/2011 40
01/30/2011 34
01/29/2011 30
01/28/2011 52
01/27/2011 39
01/26/2011 37", stringsAsFactors=FALSE)
require(data.table)
dt <- data.table(df)
dt <- dt[, `:=`(date.form = as.Date(dates, format="%m/%d/%Y"),
id = cumsum(as.numeric(temp >= 40)))][temp < 40]
dt[, list(from=min(date.form), to=max(date.form), count=.N), by=id]
# id from to count
# 1: 1 2011-01-29 2011-01-30 2
# 2: 2 2011-01-26 2011-01-27 2
アイデアは、最初に列をフォーマットdatesに変換して最初に列を作成することです。次に、位置を見つけ、それを使用して2以内の値のグループを作成するDate別の列。つまり、持っている場合は、が必要になります。つまり、to値の間のすべてが同じグループ(34、30-> 1および39、37-> 2)に属している必要があります。これを行った後、エントリを削除します。idtemp >= 40temp>=40c(40, 34, 30, 52, 39, 37)c(1,1,1,2,2,2)>= 40temp >= 40
次に、このグループで分割してからmin、maxand length(.)(デフォルトではに格納されます.N)を取得できます。