mam dane, które wygląda następująco:Dplyr lub data.table konsolidacji kolejnych wierszy w obrębie zgrupowanych danych na podstawie wartości w innej kolumnie
ID CLASS START END
100 GA 3-Jan-15 1-Feb-15
100 G 1-Feb-15 22-Feb-15
100 GA 28-Feb-15 17-Mar-15
100 G 1-Apr-15 8-Apr-15
100 G 10-Apr-15 18-Apr-15
200 FA 3-Jan-14 1-Feb-14
200 FA 1-Feb-14 22-Feb-14
200 G 28-Feb-14 15-Mar-14
200 F 1-Apr-14 20-Apr-14
Oto dane:
df <- structure(list(ID = c(100L, 100L, 100L, 100L, 100L, 200L, 200L,
200L, 200L), CLASS = structure(c(4L, 3L, 4L, 3L, 3L, 2L, 2L,
3L, 1L), .Label = c("F", "FA", "G", "GA"), class = "factor"),
START = structure(c(9L, 4L, 7L, 2L, 5L, 8L, 3L, 6L, 1L), .Label = c("1-Apr-14",
"1-Apr-15", "1-Feb-14", "1-Feb-15", "10-Apr-15", "28-Feb-14",
"28-Feb-15", "3-Jan-14", "3-Jan-15"), class = "factor"),
END = structure(c(2L, 8L, 4L, 9L, 5L, 1L, 7L, 3L, 6L), .Label = c("1-Feb-14",
"1-Feb-15", "15-Mar-14", "17-Mar-15", "18-Apr-15", "20-Apr-14",
"22-Feb-14", "22-Feb-15", "8-Apr-15"), class = "factor")), .Names = c("ID",
"CLASS", "START", "END"), class = "data.frame", row.names = c(NA,
-9L))
chciałbym grupować dane według kolumny ID, a następnie konsolidować kolejne wystąpienia tej samej wartości w kolumnie KLASA (posortowane według daty START), wybierając minimalną datę rozpoczęcia i maksymalną datę zakończenia. Tak więc dla numeru identyfikacyjnego 100 istnieje tylko jeden przypadek, w którym klasa "G" jest kolejna, dlatego chciałbym skonsolidować te dwa wiersze w jednym wierszu z datami min (START) i max (END). Jest to prosty przykład, ale w rzeczywistych danych czasami istnieje kilka kolejnych wierszy, które muszą zostać skonsolidowane.
Próbowałem group_by następnie za pomocą jakiegoś rankingu, ale to nie wydaje się rade. Wszelkie sugestie, jak rozwiązać ten problem? Również po raz pierwszy zamieszczam na SO, więc mam nadzieję, że to pytanie ma sens.
Wynik powinien wyglądać następująco:
ID CLASS START END
100 GA 3-Jan-15 1-Feb-15
100 G 1-Feb-15 22-Feb-15
100 GA 28-Feb-15 17-Mar-15
100 G 1-Apr-15 18-Apr-15
200 FA 3-Jan-14 22-Feb-14
200 G 28-Feb-14 15-Mar-14
200 F 1-Apr-14 20-Apr-14
Nie należy scalać dwóch "FA" w identyfikatorze 200 jako w łokieć? –
@CactusWoman to prawda! Będę edytować tabelę. – Kartik