次の出発点があります。
#dataset:
schedule <- tibble(start = as.Date(c("2018-07-11", NA, NA)), duration = c(10,23,9),flag_StartActual = c(TRUE,FALSE,FALSE))
表形式:
> schedule
# A tibble: 3 x 3
start duration flag_StartActual
<date> <dbl> <lgl>
1 2018-07-11 10 TRUE
2 NA 23 FALSE
3 NA 9 FALSE
end
(=開始+期間)を計算したいと思います。end
それが最初の行で行われたら、最初の行のを 2 番目の行にしたいと思いstart
ます。
さまざまなアプローチを試してきましたが、これまでのところ成功していません。私が検討したことは次のとおりです。
end
lag(end) 関数を使用して前の行から を取得します。これは 2 行目では正常に機能しますが、後続のすべての行でend
はまだ存在しません。- 実験しまし
rowwise()
たが、この場合、機能が機能しませんlag()
。
次のコードは、多かれ少なかれやりたいことを実行しますが、行ごとに変更を追加する必要があるため、これはあまりきれいではありません (その後、前のすべての行が再計算されます)。
> schedule %>%
+ mutate(
+ end = start + ddays(duration),
+ start = as_datetime(ifelse(flag_StartActual==TRUE,start,lag(end)))
+ ) %>%
+ mutate(
+ end = start + ddays(duration),
+ start = as_datetime(ifelse(flag_StartActual==TRUE,start,lag(end)))
+ )
# A tibble: 3 x 4
start duration flag_StartActual end
<dttm> <dbl> <lgl> <dttm>
1 2018-07-11 00:00:00 10 TRUE 2018-07-21 00:00:00
2 2018-07-21 00:00:00 23 FALSE 2018-08-13 00:00:00
3 2018-08-13 00:00:00 9 FALSE NA
以下rowwise()
のようなコードへのインクルードは機能しません。
schedule %>%
rowwise() %>%
mutate(
end = start + ddays(duration),
start = as_datetime(ifelse(flag_StartActual==TRUE,start,lag(end)))
)
とにかく、私は少し立ち往生しており、これにアプローチする方法について誰かが賢明なアイデアを持っていることを願っていますか?