[R-es] aplicar función de cuantilas a un dataframe

morales en us.es morales en us.es
Mie Mar 17 17:49:38 CET 2010


Muchas gracias Jorge. Tanto tu procedimiento como el de Javier me valen.

Saludos cordiales,

M. Morales


----- Mensaje original -----
De: Jorge Ivan Velez <jorgeivanvelez en gmail.com>
Fecha: Miércoles, Marzo 17, 2010 3:53 pm
Asunto:  Re: Re: [R-es] aplicar función de cuantilas a un dataframe
A: morales en us.es
CC: r-help-es en r-project.org


> Buenos dias Manuel,
> 
> Podrias utilizar lo siguiente:
> 
> # funcion percentiles
> percen <- function(x) quantile(x, probs = c(.05,.10,.20,.5,.6,.8,.95))
> 
> as.data.frame(with(example, tapply(recall, list(EDUCATION, Age), percen)))
> #                                                            45
>                           85
> # High 23.0, 23.0, 23.0, 23.0, 24.6, 27.0, 27.0 23.3, 24.6, 27.2, 35.0,
> 36.2, 38.6, 40.4
> # LOW  13.8, 15.6, 19.2, 21.0, 27.4, 37.0, 37.0 18.0, 18.0, 18.0, 19.5,
> 20.4, 21.8, 22.7
> 
> Saludos,
>       Jorge Ivan Velez
> 
> 
> 2010/3/17 <>
> 
> >
> > Hola, perdón por el error en el fichero que os dejé. Ya lo he 
> arreglado y
> > os lo adjunto de nuevo con el valor  "LOW" corregido.  Sigo teniendo 
> el
> > problema de obtener varias cuantilas para cada variable 
> estratificada. Solo
> > puedo conseguir una cuantila de la siguiente forma:
> >
> >
> >
> > > percen2 = function(x) {
> > + quantile(x,probs = c(.10))
> > + }
> > > percen2(example$recall)
> > 10%
> >  18
> > > aggregate(example$recall, list(example$EDUCATION,example$Age),percen2)
> >  Group.1 Group.2    x
> > 1    High      45 23.0
> > 2     LOW      45 16.5
> > 3    High      85 27.2
> > 4     LOW      85 18.0
> > >
> >
> > Sin embargo, me gustaría conseguir juntos varios valores de cuantilas.
> > Alguna sugerencia?
> >
> > Saludos,
> >
> > M. Morales
> >
> >
> >
> >
> >
> >
> >
> > ----- Mensaje original -----
> > De: Jorge Ivan Velez <jorgeivanvelez en gmail.com>
> > Fecha: Martes, Marzo 16, 2010 11:28 pm
> > Asunto:  Re: [R-es] aplicar función de cuantilas a un dataframe
> > A: morales en us.es
> > CC: r-help-es en r-project.org
> >
> >
> > > Buenas tardes Manuel,
> > >
> > > Muchas gracias por el ejemplo!
> > >
> > > Lo que esta ocurriendo es que en una de las combinaciones 
> EDUCATION -
> > > Age no
> > > tienes observaciones, por lo que no es posible calcular los cuantiles
> > > de
> > > recall en ese nivel. Por lo tanto obtienes:
> > >
> > > # lo que quieres calcular
> > > with(example, aggregate(recall, list(EDUCATION, Age), quantile))
> > > # Error in aggregate.data.frame(as.data.frame(x), ...) :
> > > #  'FUN' must always return a scalar
> > >
> > > De la siguiente manera puedes calcular el numero de observaciones 
> por
> > > combinacion que menciono anteriormente:
> > >
> > > # numero de observaciones en cada combinacion
> > > with(example, table(EDUCATION, Age))
> > > #         Age
> > > # EDUCATION 45 85
> > > #     High  5  3
> > > #     Low   1  0
> > > #     LOW   4  4
> > >
> > > Cual es la diferencia entre "Low" y "LOW"?   Mi sugerencia seria
> > > unificar el
> > > nivel educativo a uno de los dos y luego ejecutar nuevamente el analisis.
> > >
> > > Espero sea de utilidad,
> > >
> > >                              Jorge Ivan Velez
> > >
> > >
> > > 2010/3/16 <>
> > >
> > > > Hola R-adictos,
> > > >
> > > > me gustaría que alguien me ayudara a aplicar la función "quantile"
> > (varios
> > > > percentiles) a un marco de datos estratificado por algunas variables
> > > > categóricas (ver fichero adjunto como ejemplo). La idea es obtener
> > varios
> > > > percentiles de varias variables (primeras columnas del fichero de
> > datos),
> > > > pero dividiendo el marco de datos en función de los valores de las
> > variables
> > > > categóricas (educación y edad, las dos últimas columnas del fichero
> > > de
> > > > datos).
> > > >
> > > > Lo he intentado con aggregate y este es el resultado:
> > > >
> > > > example= read.table("example.txt",header=T)
> > > > aggregate(example$recall, list(example$EDUCATION,example$Age), mean)
> > > > aggregate(example$recall, list(example$EDUCATION,example$Age),
> > quantile)
> > > >
> > > > > aggregate(example$recall, list(example$EDUCATION,example$Age),
> > quantile)
> > > > Error en aggregate.data.frame(as.data.frame(x), ...) :
> > > >  'FUN' must always return a scalar
> > > >
> > > > Tambien he intentado crear una función para aplicarla, pero este 
> ha
> > > sido el
> > > > resultado:
> > > >
> > > > percen = function(x) {
> > > > quantile(x,probs = c(.05,.10,.20,.5,.6,.8,.95))
> > > > }
> > > > percen(example$recall)
> > > > aggregate(example$recall, list(example$EDUCATION,example$Age), percen)
> > > >
> > > > > aggregate(example$recall, list(example$EDUCATION,example$Age),
> > percen)
> > > > Error en aggregate.data.frame(as.data.frame(x), ...) :
> > > >  'FUN' must always return a scalar
> > > >
> > > >
> > > > Alguna sugerencia? Gracias anticipadas
> > > >
> > > > Manuel
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > _______________________________________________
> > > > R-help-es mailing list
> > > > R-help-es en r-project.org
> > > >
> > > >
> > > >
> >



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