条件に合致する観測値(バイナリフラグ)を特定の日付に、フラグに一致する日付範囲の観測テーブルに変換する必要があります。連続した日付の行を日付範囲の列に変換する
サンプル・データは、次のようになります。
id <- c(1001, 1001, 1001, 1002, 1002, 1002, 1003, 1003, 1003)
date <- c("2016-06-20", "2016-06-21", "2016-06-22", "2016-06-20",
"2016-06-21", "2016-06-22", "2016-06-20", "2016-06-21",
"2016-06-22")
flag <- c(1, 0, 0, 1, 1, 0, 1, 0, 1)
mydata <- data.frame(id, date, flag)
id date flag
1001 2016-06-20 1
1001 2016-06-21 0
1001 2016-06-22 0
1002 2016-06-20 1
1002 2016-06-21 1
1002 2016-06-22 0
1003 2016-06-20 1
1003 2016-06-21 0
1003 2016-06-22 1
私は2つのステップのプロセスとしてこれを考えています。
ステップ1:フラグが連続した日に発生するかどうかを判断します。
これはこの質問に似ています - R, find, dates, consecutive - 条件付き、flag > 0
の場合。私は解決策を適用しようとしますが、それは全く同じように動作しません。
mydata$flag_consecutive <- mydata$flag > 0 & c(NA, diff(as.Date(mydata$date)) == 1)
id date flag flag_consecutive
1001 2016-06-20 1 NA
1001 2016-06-21 0 FALSE
1001 2016-06-22 0 FALSE
1002 2016-06-20 1 FALSE
1002 2016-06-21 1 TRUE
1002 2016-06-22 0 FALSE
1003 2016-06-20 1 FALSE
1003 2016-06-21 0 FALSE
1003 2016-06-22 1 TRUE
ステップ2:作成した日付範囲の列
私はフラグが1日だけ、開始日と終了日に発生した場合はR. にベクトル化してこの部分にアプローチするかどうかはわかりません同じだ。 フラグが連続した日に発生した場合は、シーケンスの最初の日をdate_start
、最後の日をdate_end
とします。フラグが発生していない場合は、データセットからそのフラグを削除します。私は生成したいのですがどのような
は、この方法でフォーマットされたデータである:あなたがステップ1またはステップ2上の任意のガイダンスを提供できる場合
id flag date_start date_end
1001 1 2016-06-20 2016-06-20
1002 1 2016-06-20 2016-06-21
1003 1 2016-06-20 2016-06-20
1003 1 2016-06-22 2016-06-22
、私は非常に感謝しています。私はサークルで考えており、ステップ1が必要かどうかはわかりません。