データセットdf
の行をマージして、各レコードIDに対して行のEnd_Date
が次の行のStart_Date
と等しい場合、それらを組み合わせるのが好きです。2つのdatetime変数に基づいて行をマージする方法
私が考えている現在の論理は、最初にIDでグループ化してから、行1から行n()にループすることです。行1のEnd_Date
が行2のStart_Date
に等しい場合、行1のEnd_Date
を行2のEnd_Date
に置き換え、行2を削除します。次に行1を新しい行2と比較します。
これについてのコードを書く方法については、本当に助けてください。ありがとうございました!
df <- read.table(text = "
ID Start_Date End_Date
1 09/09/2016 11/09/2016
1 11/09/2016 17/09/2016
1 17/09/2016 23/11/2016
1 23/11/2016 28/11/2016
1 28/11/2016 14/12/2016
1 14/12/2016 22/12/2016
1 22/12/2016 23/12/2016
1 25/12/2016 03/01/2017
1 06/01/2017 07/02/2017
1 07/02/2017 22/02/2017
1 22/02/2017 27/02/2017
1 28/03/2017 30/05/2017
1 12/06/2017 03/07/2017
1 03/07/2017 04/07/2017
1 14/08/2017 14/08/2017
1 15/08/2017 23/08/2017
1 23/08/2017 24/08/2017
1 24/08/2017 28/08/2017
1 07/09/2017 07/09/2017
1 24/09/2017 24/09/2017
1 01/10/2017 08/11/2017
1 08/11/2017 31/12/2017
2 08/08/2017 10/08/2017
2 10/08/2017 11/08/2017", stringsAsFactors = FALSE, header = TRUE)
出力データは次のようになります。私は何が起こっている検査する行で、この行を実行することをお勧め
df %>%
mutate(collapse = Start_Date == lag(End_Date),
group = cumsum(c(0, tail(!collapse, -1)))) %>%
group_by(group) %>%
summarise(Start_Date = first(Start_Date),
End_Date = last(End_Date)) %>%
select(Start_Date, End_Date)
:
df_new <- read.table(text = "
ID Start_Date End_Date
1 09/09/2016 23/12/2016
1 25/12/2016 03/01/2017
1 06/01/2017 27/02/2017
1 28/03/2017 30/05/2017
1 12/06/2017 04/07/2017
1 14/08/2017 14/08/2017
1 15/08/2017 28/08/2017
1 07/09/2017 07/09/2017
1 24/09/2017 24/09/2017
1 01/10/2017 31/12/2017
2 08/08/2017 11/08/2017", stringsAsFactors = FALSE, header = TRUE)
[範囲が重複する行を折りたたむ](https://stackoverflow.com/questions/41747742/collapse-rows-with-overlapping-ranges)とその中のリンクはあなたを動かすことができます。 – Henrik