私はこのようなことをします。ここで使用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)に属している必要があります。これを行った後、エントリを削除します。id
temp >= 40
temp>=40
c(40, 34, 30, 52, 39, 37)
c(1,1,1,2,2,2)
>= 40
temp >= 40
次に、このグループで分割してからmin
、max
and length(.)
(デフォルトではに格納されます.N
)を取得できます。