Francisco Javier
2014-Apr-27 22:53 UTC
[R-es] Acumulado hasta una fecha exacta según individuo
En primer lugar, muchas gracias a Carlos J. Gil Bellosta, tanto por la rapidez como por la precisión de su respuesta. El código que planteas es exactamente lo que preguntaba. La única duda que me queda es si el data.table final que queda, sólo puede recoger cantidades totales que no sean nulas. A modo de ejemplo, supongamos que los datos contuvieran, para el sijeto ID=100, una variable "ENTRADA" que fuese ANTERIOR A TODAS LAS VARIABLES "FECHA" DEL SUJETO: require(data.table) datos2 <- data.table(data.frame(ID = c(rep(100,3),rep(120,2)), FECHA = as.Date(c("02/08/2005", "19/10/2005", "09/12/2007", "11/05/2006", "20/12/2009"),"%d/%m/%Y"), ENTRADA = c(as.Date(rep("30/07/2004",3),"%d/%m/%Y"), as.Date(rep("25/02/2008",2),"%d/%m/%Y")), CANTIDAD = c(25, 15, 12, 35, 2))) En ese caso, sería de esperar un resultado del tipo:> resID total 1: 100 0 # SE REMARCA QUE NO HAY TOTAL ACUMULADO PARA ID=100 2: 120 35 Y el resultado del código omite directamente el total acumulado del sujeto ID=100:> resID total 1: 120 35 En cualquier caso, muchas gracias. [[alternative HTML version deleted]]
"Olivier Nuñez"
2014-Apr-28 08:13 UTC
[R-es] Acumulado hasta una fecha exacta según individuo
Esto debería funcionar: datos2[,list(unique(ENTRADA),sum(CANTIDAD*(FECHA<ENTRADA))),by=ID] Un saludo. Olivier> En primer lugar, muchas gracias a Carlos J. Gil Bellosta, tanto por la rapidez como > por la precisión de su respuesta. El código que planteas es exactamente lo que > preguntaba. > > > > La única duda que me queda es si el data.table final que queda, sólo puede recoger > cantidades totales que no sean nulas. A modo de ejemplo, supongamos que los datos > contuvieran, para el sijeto ID=100, una variable "ENTRADA" que fuese ANTERIOR A > TODAS LAS VARIABLES "FECHA" DEL SUJETO: > > > > require(data.table) > datos2 <- data.table(data.frame(ID = c(rep(100,3),rep(120,2)), > FECHA = as.Date(c("02/08/2005", "19/10/2005", "09/12/2007", > "11/05/2006", "20/12/2009"),"%d/%m/%Y"), > ENTRADA = c(as.Date(rep("30/07/2004",3),"%d/%m/%Y"), > > as.Date(rep("25/02/2008",2),"%d/%m/%Y")), > CANTIDAD = c(25, 15, 12, 35, 2))) > > > En ese caso, sería de esperar un resultado del tipo: > > > >> res > > ID total > > 1: 100 0 # SE REMARCA QUE NO HAY TOTAL ACUMULADO PARA ID=100 > > 2: 120 35 > > > > Y el resultado del código omite directamente el total acumulado del sujeto ID=100: > > > >> res > > ID total > > 1: 120 35 > > > > En cualquier caso, muchas gracias. > > > > > > > > > > > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- ____________________________________ Olivier G. Nuñez Email: onunez en unex.es http://kolmogorov.unex.es/~onunez Tel : +34 663 03 69 09 Departamento de Matemáticas Universidad de Extremadura