Język R: problemy z obliczaniem „grupuj” lub dzielone z pakietem ff
Jestem prawie nowy w R, więc przepraszam, jeśli zadam kilka podstawowych pytań, ale nie mogę znaleźć rozwiązania tego „prostego” problemu: mając bazę danych (duży, 25 milionów wierszy, 14 kolumn) pacjentów, mam kilka wiersze dla każdego „id”, na przykład dla tej struktury:
"id" "birth_date" "treatment" "date_treatment"
123 2002-01-01 2 2011-01-03
123 2002-01-01 3 2011-10-03
124 2002-01-01 6 2009-11-07
124 2002-01-01 NA NA
... ..... ...... ........
1022 2007-01-01 4 2011-01-06
Muszę użyć pakietu ff, aby móc pracować z małą ilością pamięci RAM, więc WSZYSTKIE procesy powinny być w funkcjach ff. I chcę wiedzieć, dla każdego pojedynczego „id”, który jest minimalnym „wiekiem”, kiedy otrzymywał leczenie = 2 lub 4. tak, to byłoby, wkażdy pojedynczy identyfikator, w kodzie ogólnym:
if (leczenie w c (2,4)), a następnie min (date_treatment - data_rodziny)
Chcę tylko zachować te minimalne dane „wieku” i być może identyfikatory.
Jedno rozwiązanie to zrobić:
age_c <- (data$date_treatment - data$birth_date)/365.25;
data$age_c <- age_c;
idx <- ffwhich( data, treatment %in% c(2,4) );
result <- data[idx,];
Dzięki temu cały proces przebiega w formacie ff i nie występują problemy z pamięcią, ale ... Nadal muszę znaleźć sposób na przyjęcie tych minimalnych wartości dla każdego identyfikatora ... ffdfdply wydaje się być w stanie to zrobić:
age_fun <- function(x){
min_ <- min.ff(x$age_c);
data.frame( age = min_);
}
result2 <- ffdfdply(x = data,
split = data$id,
FUN = function(x) age_fun(x),
BATCHBYTES = 5000,
trace=TRUE
);
Co zajmuje trochę czasu, a także daje mi wiele różnych błędów ....
Jakieś rozwiązanie?
Jest to ogólny problem, który w SAS lub SQL jest łatwy do wykonania, ale nie znajduję odpowiedniej kombinacji w R. Więc pytanie ogólne brzmi:
jak obliczyć funkcje wiersza-kolumny dla identycznych wartości (grup) zmiennej (wiersza) w bardzo dużych zestawach danych?
Dzięki !!