lbianchi
2014-Sep-01 19:03 UTC
[R-es] Armar clases con diferentes rangos en una tabla de frecuencias
Hola amigos: el problema que se me presenta no creo que resulta muy difícil, pero no he logrado resolverlo. Digamos que tengo una tabla con dos columnas, "Fecha" y "Eventos". En la columna Fecha, tengo el año y en la columna Eventos el número de ocurrencia de determinado suceso en dicho año. Por ejemplo: > head(tabla) fecha eventos 1 1971 1 2 1972 8 3 1973 1 4 1974 7 5 1975 7 6 1976 2 Puedo tener más de una fila por cada año, por lo que si quiero tener la frecuencia de Eventos por año, encontré dos formas de obtenerla: # una forma > aggregate(tabla$eventos, list(tabla$fecha), sum) # otra forma > library(plyr) > ddply(tabla,.(fecha), summarize, freq=sum(eventos)) lo cual me devuelve algo como: fecha freq 1 1971 18 2 1972 31 3 1973 22 4 1974 36 5 1975 7 6 1976 2 7 1977 2 8 1978 9 ... Hasta aquí todo bien, pero se me presentan dos problemas (o un mismo problema dividido en dos partes): 1- Con el código de arriba obtengo un valor por año, pero yo necesito ese valor para diferentes rangos de años, por ejemplo, cada 5, 10, 15, 20 años. 2- A la vez, el punto de inicio para armar estas clases tendría que ir variando. Por ejemplo, agrupando cada 5 años, podría tener el número de eventos entre 1970-1974, 1975-1979, 1980-1984, etc. pero también necesitaría poder tener el número de eventos en los períodos 1971-1975, 1976-1980, 1981-1985, etc. y luego en los períodos 1972-1976, 1977-1981, 1982-1986, etc. Aquí puse sólo una porción de la tabla, pero el número de años de la tabla completa puede ser de alrededor de 500 o tal vez un poco más. Todas las opciones que encontré para agrupar los datos son en función de valores ya contenidos en la tabla, pero no encontré ninguna manera de hacerlo más "dinámico" como lo que yo necesito. ¿Podría hacer algo con cut()? lo estuve intentando, pero no logré nada. Cualquier sugerencia, me será de gran ayuda. Muchas Gracias, Lucas. [[alternative HTML version deleted]]
daniel
2014-Sep-01 19:25 UTC
[R-es] Armar clases con diferentes rangos en una tabla de frecuencias
library(zoo) ?rollapply ¿es eso lo que buscas? Daniel Merino El 1 de septiembre de 2014, 16:03, lbianchi <lbianchi en zoho.com> escribió:> Hola amigos: > el problema que se me presenta no creo que resulta muy difícil, pero no > he logrado resolverlo. > > Digamos que tengo una tabla con dos columnas, "Fecha" y "Eventos". En la > columna Fecha, tengo el año y en la columna Eventos el número de ocurrencia > de determinado suceso en dicho año. > Por ejemplo: > > > head(tabla) > fecha eventos > 1 1971 1 > 2 1972 8 > 3 1973 1 > 4 1974 7 > 5 1975 7 > 6 1976 2 > > Puedo tener más de una fila por cada año, por lo que si quiero tener la > frecuencia de Eventos por año, encontré dos formas de obtenerla: > # una forma > > aggregate(tabla$eventos, list(tabla$fecha), sum) > > # otra forma > > library(plyr) > > ddply(tabla,.(fecha), summarize, freq=sum(eventos)) > > lo cual me devuelve algo como: > > fecha freq > 1 1971 18 > 2 1972 31 > 3 1973 22 > 4 1974 36 > 5 1975 7 > 6 1976 2 > 7 1977 2 > 8 1978 9 > ... > > > Hasta aquí todo bien, pero se me presentan dos problemas (o un mismo > problema dividido en dos partes): > > 1- Con el código de arriba obtengo un valor por año, pero yo necesito ese > valor para diferentes rangos de años, por ejemplo, cada 5, 10, 15, 20 años. > > 2- A la vez, el punto de inicio para armar estas clases tendría que ir > variando. Por ejemplo, agrupando cada 5 años, podría tener el número de > eventos entre 1970-1974, 1975-1979, 1980-1984, etc. pero también > necesitaría poder tener el número de eventos en los períodos 1971-1975, > 1976-1980, 1981-1985, etc. y luego en los períodos 1972-1976, 1977-1981, > 1982-1986, etc. > > Aquí puse sólo una porción de la tabla, pero el número de años de la tabla > completa puede ser de alrededor de 500 o tal vez un poco más. > Todas las opciones que encontré para agrupar los datos son en función de > valores ya contenidos en la tabla, pero no encontré ninguna manera de > hacerlo más "dinámico" como lo que yo necesito. > > ¿Podría hacer algo con cut()? lo estuve intentando, pero no logré nada. > > Cualquier sugerencia, me será de gran ayuda. > > Muchas Gracias, > > Lucas. > > > > > > > > > > [[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 >-- Daniel [[alternative HTML version deleted]]