[R-es] Frecuencia absoluta acumulada por individuo y por

"Olivier Nuñez" onunez en unex.es
Mie Mar 12 17:56:40 CET 2014


Se supone que todos los años del periodo considerado están en la base de datos.
Dudo que no sea el caso (tiene según Francisco, 2 millones casos!).
Por otro lado, me parece que la variante que propuso Raul no da el resultado buscado
al no acumular la variable CANTIDAD por ID (ultima linea).
Un saludo. Olivier

-- 
Olivier Nuñez
Cancer Epidemiology Unit
National Center of Epidemiology (Pab, 12)
Instituto de Salud Carlos III
Monforte de Lemos 5
28029 Madrid

Phone: +(34) 91 822 2859
Fax:   +(34) 91 387 7815
e-mail: onunez en isciii.es
> 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 en 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 en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
> 	[[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



Más información sobre la lista de distribución R-help-es