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

Carlos J. Gil Bellosta cgb en datanalytics.com
Mie Mar 17 18:50:18 CET 2010


Hola, ¿qué tal?

Respondo tarde y para darle gran lanzada alternativa al moro muerto:

library( doBy )
summaryBy( recall ~ EDUCATION + Age, data = example, FUN = function( x
) quantile( x, c( 0.25, 0.75 )) )

Siempre he buscado algún tipo de solución en R lo más próxima posible
al habitual

select x1, x2, f( y1, y2) as colb1, g(y2 + y3, y4) as colb2, ...
from mi.tabla
group by x1, x2

de SQL que permita:

1) Realizar las llamadas a los parámetros y1,... (columnas de la tabla
original) de una manera simple (sin "decoraciones", etc.).
2) Poder utilizar una función distinta/arbitraria por columna.

Hummmm... ¿alguna idea?

Un saludo,

Carlos J. Gil Bellosta


El día 17 de marzo de 2010 17:49,  <morales en us.es> escribió:
> 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
>> > > >
>> > > >
>> > > >
>> >
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



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