Hola,

También es muy buena la solución.

Acabo de caer en la cuenta de que tu solución como la de Olivier no
contempla el caso de que haya un salto para un determinado (o vaya para
varios) IDs de varios años.
En ese caso, tienes que crear los años faltantes para poder luego rellenar
el acumulado. Puedes a partir del primer "todos" reconstruirlo sin "sqldf"
y luego seguir con la solución que has propuesto...

Un ejemplo de ese conjunto sería este:

ID      FECHA YEAR CANTIDAD
1 100 2005-08-02 2005        1
2 100 2005-10-19 2005        2
3 100 2007-02-09 2007        1
4 100 2007-10-25 2007        1
5 100 2007-10-29 2007        1
6 120 2006-05-11 *2006*        1
7 120 2006-08-17 *2006*        5
8 120 2006-10-15 *2006*        1
9 120 2007-04-16 *2010*        3


Saludos,
Carlos Ortega
www.qualityexcellence.es





2014-03-12 12:58 GMT+01:00 <rvaquerizo@analisisydecision.es>:

> Por si tienes especial interés en utilizar sqldf:
>
> todos <- sqldf(
> "select distinct a.ID,b.YEAR
> from dt a , dt b;")
>
> suma <- sqldf(
> "select ID,YEAR,sum(CANTIDAD) as CANTIDAD
> from dt
> group by ID,YEAR;")
>
> todos <- sqldf(
> "select a.ID,a.YEAR, CANTIDAD
> from todos a left join suma b
> on a.ID = b.ID and a.YEAR = b.YEAR
> group by a.ID,a.YEAR;")
>
> todos$CANTIDAD = ifelse(is.na(todos$CANTIDAD),0,todos$CANTIDAD)
> todos$ACUM = cumsum(todos$CANTIDAD)
>
> La suma acumulada también la podemos hacer con sqldf, pero nos metemos en
> un fregado considerable. Por cierto, mira que es cabezota sqldf con los
> valores nulos... Saludos.
>
>
> Raúl Vaquerizo Romero
> www.analisisydecision.es
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]

