Я пытаюсь создать новые строки на основе перекрывающихся периодов времени существующих строк.Например, я хотел бы превратить это:
Customer_Product <- data.table(Customer=c("A01","A01","A01", "A02", "A02", "A02", "A03", "A03", "A03"),
Product=c("Prod1","Prod2","Prod3","Prod1","Prod2","Prod3","Prod1","Prod2","Prod3"),
Start_Date=c("1/1/2015", "3/1/2015", "4/1/2015", "1/1/2015", "3/1/2015", "4/1/2015", "1/1/2015", "3/1/2015", "4/1/2015"),
End_Date=c("2/1/2015","5/1/2015","5/1/2015","2/1/2015","5/1/2015","6/1/2015","2/1/2015","6/1/2015","5/1/2015"))
Customer Product Start_Date End_Date
1: A01 Prod1 1/1/2015 2/1/2015
2: A01 Prod2 3/1/2015 5/1/2015
3: A01 Prod3 4/1/2015 5/1/2015
4: A02 Prod1 1/1/2015 2/1/2015
5: A02 Prod2 3/1/2015 5/1/2015
6: A02 Prod3 4/1/2015 6/1/2015
7: A03 Prod1 1/1/2015 2/1/2015
8: A03 Prod2 3/1/2015 6/1/2015
9: A03 Prod3 4/1/2015 5/1/2015
Во что-то вроде этого:
Customer_Product_Combo <- data.table(Customer=c("A01","A01","A01", "A02", "A02", "A02", "A02","A03", "A03","A03","A03"),
Product_or_Combination=c("Prod1","Prod2","Prod2/Prod3","Prod1","Prod2","Prod2/Prod3","Prod3","Prod1","Prod2","Prod2/Prod3","Prod2"),
Start_Date=c("1/1/2015","3/1/2015","4/1/2015","1/1/2015","3/1/2015","4/1/2015","5/1/2015","1/1/2015","3/1/2015","4/1/2015","5/1/2015"),
End_Date=c("2/1/2015","4/1/2015","5/1/2015","2/1/2015","4/1/2015","5/1/2015","6/1/2015","2/1/2015","4/1/2015","5/1/2015","6/1/2015"))
Customer Product_or_Combination Start_Date End_Date
1: A01 Prod1 1/1/2015 2/1/2015
2: A01 Prod2 3/1/2015 4/1/2015
3: A01 Prod2/Prod3 4/1/2015 5/1/2015
4: A02 Prod1 1/1/2015 2/1/2015
5: A02 Prod2 3/1/2015 4/1/2015
6: A02 Prod2/Prod3 4/1/2015 5/1/2015
7: A02 Prod3 5/1/2015 6/1/2015
8: A03 Prod1 1/1/2015 2/1/2015
9: A03 Prod2 3/1/2015 4/1/2015
10: A03 Prod2/Prod3 4/1/2015 5/1/2015
11: A03 Prod2 5/1/2015 6/1/2015
Я искал IRanges, потому что кажется, что disjoin () может быть возможным решением, но я не вижу способа унаследовать / объединить данные "Prod".
У меня естьтакже пытался набросать что-то, используя лидерство / отставание в dplyr с последующим циклом сбора / слияния, но также стоит отметить, что у меня могут быть случаи, когда более двух «Prod» перекрываются, и тогда логика становится просто грязной.
Есть ли разумный способ сделать это?Любая помощь с благодарностью!