Hola a tod@s: Tengo una duda sobre la salida de la tabla de frecuencias de R. Estoy utilizando la función table, para que me saque el numero de casos agrupados por edades; el caso, es que si no hay de una edad, necesito que me ponga un 0; o un NA, algo para que luego pueda utilizar los vectores de salida para seguir haciendo operaciones y que no se me queje de la longitud, habría alguna forma? La opción que había pensado, aunque no se muy bien como llevarla a cabo, sería crear un vector de "0" y con funciones "IF", que me lo reescribiera con las frecuencias sacadas de la función table. Un saludo, Pablo ************************* AVISO LEGAL ************************* Este mensaje electrónico está dirigido exclusivamente a sus destinatarios, pudiendo contener documentos anexos de carácter privado y confidencial. Si por error, ha recibido este mensaje y no se encuentra entre los destinatarios, por favor, no use, informe, distribuya, imprima o copie su contenido por ningún medio. Le rogamos lo comunique al remitente y borre completamente el mensaje y sus anexos. El Instituto de Salud Carlos III no asume ningún tipo de responsabilidad legal por el contenido de este mensaje cuando no responda a las funciones atribuidas al remitente del mismo por la normativa vigente. [[alternative HTML version deleted]]
Hola, ¿qué tal? Este es un ejemplo que puede que te pueda guiar:> letras <- c( "a", "c", "c" ) > table( letras )letras a c 1 2> table( factor( letras ) )a c 1 2 Pero:> table( factor( letras, levels = c("a", "b", "c") ) )a b c 1 0 2 Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 27 de febrero de 2012 14:25, <ppueyo en isciii.es> escribió:> Hola a tod en s: > > Tengo una duda sobre la salida de la tabla de frecuencias de R. > > Estoy utilizando la función table, para que me saque el numero de casos agrupados por edades; el caso, es que si no hay de una edad, necesito que me ponga un 0; o un NA, algo para que luego pueda utilizar los vectores de salida para seguir haciendo operaciones y que no se me queje de la longitud, habría alguna forma? > > La opción que había pensado, aunque no se muy bien como llevarla a cabo, sería crear un vector de "0" y con funciones "IF", que me lo reescribiera con las frecuencias sacadas de la función table. > > Un saludo, > > Pablo > > > ************************* AVISO LEGAL ************************* > Este mensaje electrónico está dirigido exclusivamente a sus destinatarios, > pudiendo contener documentos anexos de carácter privado y confidencial. > Si por error, ha recibido este mensaje y no se encuentra entre los > destinatarios, por favor, no use, informe, distribuya, imprima o copie su > contenido por ningún medio. Le rogamos lo comunique al remitente y borre > completamente el mensaje y sus anexos. El Instituto de Salud Carlos III no > asume ningún tipo de responsabilidad legal por el contenido de este mensaje > cuando no responda a las funciones atribuidas al remitente del mismo por la > normativa vigente. > > [[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 >
Lo primero que tienes que hacer es mirar los levels de tu variable de edades, los que no aparecenahí no van a aparecer en la tabla, yo haría una cosa así:> Edades <- c(15,16,19,20,20) > table(Edades)Edades 15 16 19 20 1 1 1 2> levels(factor(Edades))[1] "15" "16" "19" "20"> lab <- factor(max(Edades):min(Edades)) > EdadesFactor <- factor(Edades, levels=lab) > table(EdadesFactor)EdadesFactor 20 19 18 17 16 15 2 1 0 0 1 1 Espero que te sirva. Un saludo, Pelayo On Mon, 27 Feb 2012 14:25:04 +0100, ppueyo en isciii.es wrote:> Hola a tod en s: > > Tengo una duda sobre la salida de la tabla de frecuencias de R. > > Estoy utilizando la función table, para que me saque el numero de > casos agrupados por edades; el caso, es que si no hay de una edad, > necesito que me ponga un 0; o un NA, algo para que luego pueda > utilizar los vectores de salida para seguir haciendo operaciones y > que > no se me queje de la longitud, habría alguna forma? > > La opción que había pensado, aunque no se muy bien como llevarla a > cabo, sería crear un vector de "0" y con funciones "IF", que me lo > reescribiera con las frecuencias sacadas de la función table. > > Un saludo, > > Pablo > > > ************************* AVISO LEGAL ************************* > Este mensaje electrónico está dirigido exclusivamente a sus > destinatarios, > pudiendo contener documentos anexos de carácter privado y > confidencial. > Si por error, ha recibido este mensaje y no se encuentra entre los > destinatarios, por favor, no use, informe, distribuya, imprima o > copie su > contenido por ningún medio. Le rogamos lo comunique al remitente y > borre > completamente el mensaje y sus anexos. El Instituto de Salud Carlos > III no > asume ningún tipo de responsabilidad legal por el contenido de este > mensaje > cuando no responda a las funciones atribuidas al remitente del mismo > por la > normativa vigente. > > [[alternative HTML version deleted]]
Bueno, he de decir que he mirado los dos métodos que me habeis sugerido, que son muy parecidos; aun así no me ha funcionado se queja de la longitud diferente de vectores .... El caso es que he pensado otra forma de hacer, más larga, pero creo que efectiva, el problema es que tampoco funciona, y no sé porqué, porque lo veo muy sencillo (me llevo mal con R) os pongo un poco el caso a ver si podéis ver algún fallo de sintaxis y lo entendéis: Tengo 18 grupos de edad (del 1 al 18), pero al pedir las precuencias, es posible que haya grupos de edad sin representación, por tanto necesitaría un 0. En este caso: Tabla "frech" grupo frecuencia 5 "5" "1" 6 "6" "1" 7 "7" "3" 8 "8" "2" 9 "9" "5" 10 "10" "20" 11 "11" "20" 12 "12" "31" 13 "13" "39" 14 "14" "54" 15 "15" "66" 16 "16" "54" 17 "17" "23" 18 "18" "12" Así que pensé en una función IF, de tal modo que si el primer grupo era igual a "1" , entonces me escibiese la frecuencia en otra columna que había creado previamente f99h<-c( ) En caso contrario, que me escribiese un "0". Éste es el código que he utilizado, y no me hace nada....> if(frech[,1]=="1"){+ f99h[1,1]=frech[1,2] + f99h[1,1]<-0} Está claro que si yo pidiera f99h, el primer número tendría que ser un "0", pero no lo hace.... y así lo tengo que hacer con los 17 grupos restantes; me imagino que habrá una forma más rápida, pero ya os digo que lo del "factor(levels......" no me funciona. ¿Se podría iterar la función IF en un bucle for? porque ahora son 18 grupos y no me supone mucho tiempo, pero cuando tenga 18 grupos divididos en 52 provincias.... me acabaré cortando las venas.... jejeje Un saludo, y gracias Pablo ----- Mensaje original ----- De: izquierdo Para: r-help-es@r-project.org Enviado: 27/02/2012 14:02:07 Asunto: Re: [R-es] Frecuencias Lo primero que tienes que hacer es mirar los levels de tu variable de edades, los que no aparecenahí no van a aparecer en la tabla, yo haría una cosa así:> Edades <- c(15,16,19,20,20) > table(Edades)Edades 15 16 19 20 1 1 1 2> levels(factor(Edades))[1] "15" "16" "19" "20"> lab <- factor(max(Edades):min(Edades)) > EdadesFactor <- factor(Edades, levels=lab) > table(EdadesFactor)EdadesFactor 20 19 18 17 16 15 2 1 0 0 1 1 Espero que te sirva. Un saludo, Pelayo On Mon, 27 Feb 2012 14:25:04 +0100, ppueyo@isciii.es wrote:> Hola a tod@s: > > Tengo una duda sobre la salida de la tabla de frecuencias de R. > > Estoy utilizando la función table, para que me saque el numero de > casos agrupados por edades; el caso, es que si no hay de una edad, > necesito que me ponga un 0; o un NA, algo para que luego pueda > utilizar los vectores de salida para seguir haciendo operaciones y > que > no se me queje de la longitud, habría alguna forma? > > La opción que había pensado, aunque no se muy bien como llevarla a > cabo, sería crear un vector de "0" y con funciones "IF", que me lo > reescribiera con las frecuencias sacadas de la función table. > > Un saludo, > > Pablo > > > ************************* AVISO LEGAL ************************* > Este mensaje electrónico está dirigido exclusivamente a sus > destinatarios, > pudiendo contener documentos anexos de carácter privado y > confidencial. > Si por error, ha recibido este mensaje y no se encuentra entre los > destinatarios, por favor, no use, informe, distribuya, imprima o > copie su > contenido por ningún medio. Le rogamos lo comunique al remitente y > borre > completamente el mensaje y sus anexos. El Instituto de Salud Carlos > III no > asume ningún tipo de responsabilidad legal por el contenido de este > mensaje > cuando no responda a las funciones atribuidas al remitente del mismo > por la > normativa vigente. > > [[alternative HTML version deleted]]_______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es ************************* AVISO LEGAL ************************* Este mensaje electrónico está dirigido exclusivamente a sus destinatarios, pudiendo contener documentos anexos de carácter privado y confidencial. Si por error, ha recibido este mensaje y no se encuentra entre los destinatarios, por favor, no use, informe, distribuya, imprima o copie su contenido por ningún medio. Le rogamos lo comunique al remitente y borre completamente el mensaje y sus anexos. El Instituto de Salud Carlos III no asume ningún tipo de responsabilidad legal por el contenido de este mensaje cuando no responda a las funciones atribuidas al remitente del mismo por la normativa vigente. [[alternative HTML version deleted]]
Vuelve a mirar los mensaje anterior y la ayuda de R: ?factor. factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x)) En particular combinando adecuadamente los parámetros: ''levels" y "labels" te debe de funcionar perfectamente. La parca información de los objetos que suministras en tus mensaje impide especificarte mas detalle. Si incluyeras el volcado de str(frech) y levels(frech), quizás permitiría poder ofrecerte instrucciones mas detalladas. El 01/03/2012 12:31, ppueyo@isciii.es escribió:> Bueno, he de decir que he mirado los dos métodos que me habeis sugerido, que son muy parecidos; aun asà no me ha funcionado se queja de la longitud diferente de vectores .... > El caso es que he pensado otra forma de hacer, más larga, pero creo que efectiva, el problema es que tampoco funciona, y no sé porqué, porque lo veo muy sencillo (me llevo mal con R) os pongo un poco el caso a ver si podéis ver algún fallo de sintaxis y lo entendéis: > > Tengo 18 grupos de edad (del 1 al 18), pero al pedir las precuencias, es posible que haya grupos de edad sin representación, por tanto necesitarÃa un 0. > > En este caso: > > Tabla "frech" > > grupo frecuencia > 5 "5" "1" > 6 "6" "1" > 7 "7" "3" > 8 "8" "2" > 9 "9" "5" > 10 "10" "20" > 11 "11" "20" > 12 "12" "31" > 13 "13" "39" > 14 "14" "54" > 15 "15" "66" > 16 "16" "54" > 17 "17" "23" > 18 "18" "12" > > Asà que pensé en una función IF, de tal modo que si el primer grupo era igual a "1" , entonces me escibiese la frecuencia en otra columna que habÃa creado previamente f99h<-c( ) > En caso contrario, que me escribiese un "0". > Ã0/00ste es el código que he utilizado, y no me hace nada.... > >> if(frech[,1]=="1"){ > + f99h[1,1]=frech[1,2] > + f99h[1,1]<-0} > > Está claro que si yo pidiera f99h, el primer número tendrÃa que ser un "0", pero no lo hace.... > y asà lo tengo que hacer con los 17 grupos restantes; me imagino que habrá una forma más rápida, pero ya os digo que lo del "factor(levels......" no me funciona. ¿Se podrÃa iterar la función IF en un bucle for? porque ahora son 18 grupos y no me supone mucho tiempo, pero cuando tenga 18 grupos divididos en 52 provincias.... me acabaré cortando las venas.... jejeje > > Un saludo, y gracias > Pablo > > > > > > ----- Mensaje original ----- > De: izquierdo > Para: r-help-es@r-project.org > Enviado: 27/02/2012 14:02:07 > Asunto: Re: [R-es] Frecuencias > > > Lo primero que tienes que hacer es mirar los levels de tu variable de > edades, los que no aparecenahà no van a aparecer en la tabla, yo harÃa > una cosa asÃ: > >> Edades<- c(15,16,19,20,20) >> table(Edades) > Edades > 15 16 19 20 > 1 1 1 2 >> levels(factor(Edades)) > [1] "15" "16" "19" "20" >> lab<- factor(max(Edades):min(Edades)) >> EdadesFactor<- factor(Edades, levels=lab) >> table(EdadesFactor) > EdadesFactor > 20 19 18 17 16 15 > 2 1 0 0 1 1 > > Espero que te sirva. > Un saludo, > > Pelayo > > > On Mon, 27 Feb 2012 14:25:04 +0100, ppueyo@isciii.es wrote: >> Hola a tod@s: >> >> Tengo una duda sobre la salida de la tabla de frecuencias de R. >> >> Estoy utilizando la función table, para que me saque el numero de >> casos agrupados por edades; el caso, es que si no hay de una edad, >> necesito que me ponga un 0; o un NA, algo para que luego pueda >> utilizar los vectores de salida para seguir haciendo operaciones y >> que >> no se me queje de la longitud, habrÃa alguna forma? >> >> La opción que habÃa pensado, aunque no se muy bien como llevarla a >> cabo, serÃa crear un vector de "0" y con funciones "IF", que me lo >> reescribiera con las frecuencias sacadas de la función table. >> >> Un saludo, >> >> Pablo >> >> >> ************************* AVISO LEGAL ************************* >> Este mensaje electrónico está dirigido exclusivamente a sus >> destinatarios, >> pudiendo contener documentos anexos de carácter privado y >> confidencial. >> Si por error, ha recibido este mensaje y no se encuentra entre los >> destinatarios, por favor, no use, informe, distribuya, imprima o >> copie su >> contenido por ningún medio. Le rogamos lo comunique al remitente y >> borre >> completamente el mensaje y sus anexos. El Instituto de Salud Carlos >> III no >> asume ningún tipo de responsabilidad legal por el contenido de este >> mensaje >> cuando no responda a las funciones atribuidas al remitente del mismo >> por la >> normativa vigente. >> >> [[alternative HTML version deleted]] > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > ************************* AVISO LEGAL ************************* > Este mensaje electrónico está dirigido exclusivamente a sus destinatarios, > pudiendo contener documentos anexos de carácter privado y confidencial. > Si por error, ha recibido este mensaje y no se encuentra entre los > destinatarios, por favor, no use, informe, distribuya, imprima o copie su > contenido por ningún medio. Le rogamos lo comunique al remitente y borre > completamente el mensaje y sus anexos. El Instituto de Salud Carlos III no > asume ningún tipo de responsabilidad legal por el contenido de este mensaje > cuando no responda a las funciones atribuidas al remitente del mismo por la > normativa vigente. > > [[alternative HTML version deleted]] > > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es-- +-------------------------------------------------------------- | Francisco J. Viciana Fernández | Coordinador del Registro de Población | Servicio de Estadísticas Demográficas y Sociales | Instituto de Estadística y Cartografía de Andalucía | Leonardo Da Vinci, nº 21. Isla de La Cartuja. | 41071 SEVILLA. | franciscoj.viciana@juntadeandalucia.es +-------------------------------------------------------------- [[alternative HTML version deleted]]
Hola Patricio, Quizas podria servirte lo siguiente: # datos datos <- structure(list(grupo = 5:18, frecuencia = c(1L, 1L, 3L, 2L, 5L, 20L, 20L, 31L, 39L, 54L, 66L, 54L, 23L, 12L)), .Names = c("grupo", "frecuencia"), class = "data.frame", row.names = c("5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18")) # funcion foo <- function(edad, d){ res <- with(d, match(edad, grupo)) ifelse(is.na(res), 0, unlist(d[res, 2])) } # ejemplos foo(6, datos) #[1] 1 foo(18, datos) #[1] 12 foo(99, datos) #[1] 0 Un saludo, Jorge.- 2012/3/1 <>> Bueno, he de decir que he mirado los dos métodos que me habeis sugerido, > que son muy parecidos; aun así no me ha funcionado se queja de la longitud > diferente de vectores .... > El caso es que he pensado otra forma de hacer, más larga, pero creo que > efectiva, el problema es que tampoco funciona, y no sé porqué, porque lo > veo muy sencillo (me llevo mal con R) os pongo un poco el caso a ver si > podéis ver algún fallo de sintaxis y lo entendéis: > > Tengo 18 grupos de edad (del 1 al 18), pero al pedir las precuencias, es > posible que haya grupos de edad sin representación, por tanto necesitaría > un 0. > > En este caso: > > Tabla "frech" > > grupo frecuencia > 5 "5" "1" > 6 "6" "1" > 7 "7" "3" > 8 "8" "2" > 9 "9" "5" > 10 "10" "20" > 11 "11" "20" > 12 "12" "31" > 13 "13" "39" > 14 "14" "54" > 15 "15" "66" > 16 "16" "54" > 17 "17" "23" > 18 "18" "12" > > Así que pensé en una función IF, de tal modo que si el primer grupo era > igual a "1" , entonces me escibiese la frecuencia en otra columna que había > creado previamente f99h<-c( ) > En caso contrario, que me escribiese un "0". > Éste es el código que he utilizado, y no me hace nada.... > > > if(frech[,1]=="1"){ > + f99h[1,1]=frech[1,2] > + f99h[1,1]<-0} > > Está claro que si yo pidiera f99h, el primer número tendría que ser un > "0", pero no lo hace.... > y así lo tengo que hacer con los 17 grupos restantes; me imagino que habrá > una forma más rápida, pero ya os digo que lo del "factor(levels......" no > me funciona. ¿Se podría iterar la función IF en un bucle for? porque ahora > son 18 grupos y no me supone mucho tiempo, pero cuando tenga 18 grupos > divididos en 52 provincias.... me acabaré cortando las venas.... jejeje > > Un saludo, y gracias > Pablo > > > > > > ----- Mensaje original ----- > De: izquierdo > Para: r-help-es@r-project.org > Enviado: 27/02/2012 14:02:07 > Asunto: Re: [R-es] Frecuencias > > > Lo primero que tienes que hacer es mirar los levels de tu variable de > edades, los que no aparecenahí no van a aparecer en la tabla, yo haría > una cosa así: > > > Edades <- c(15,16,19,20,20) > > table(Edades) > Edades > 15 16 19 20 > 1 1 1 2 > > levels(factor(Edades)) > [1] "15" "16" "19" "20" > > lab <- factor(max(Edades):min(Edades)) > > EdadesFactor <- factor(Edades, levels=lab) > > table(EdadesFactor) > EdadesFactor > 20 19 18 17 16 15 > 2 1 0 0 1 1 > > Espero que te sirva. > Un saludo, > > Pelayo > > > On Mon, 27 Feb 2012 14:25:04 +0100, <ppueyo@isciii.es> wrote: > > Hola a tod@s: > > > > Tengo una duda sobre la salida de la tabla de frecuencias de R. > > > > Estoy utilizando la función table, para que me saque el numero de > > casos agrupados por edades; el caso, es que si no hay de una edad, > > necesito que me ponga un 0; o un NA, algo para que luego pueda > > utilizar los vectores de salida para seguir haciendo operaciones y > > que > > no se me queje de la longitud, habría alguna forma? > > > > La opción que había pensado, aunque no se muy bien como llevarla a > > cabo, sería crear un vector de "0" y con funciones "IF", que me lo > > reescribiera con las frecuencias sacadas de la función table. > > > > Un saludo, > > > > Pablo > > > > > > ************************* AVISO LEGAL ************************* > > Este mensaje electrónico está dirigido exclusivamente a sus > > destinatarios, > > pudiendo contener documentos anexos de carácter privado y > > confidencial. > > Si por error, ha recibido este mensaje y no se encuentra entre los > > destinatarios, por favor, no use, informe, distribuya, imprima o > > copie su > > contenido por ningún medio. Le rogamos lo comunique al remitente y > > borre > > completamente el mensaje y sus anexos. El Instituto de Salud Carlos > > III no > > asume ningún tipo de responsabilidad legal por el contenido de este > > mensaje > > cuando no responda a las funciones atribuidas al remitente del mismo > > por la > > normativa vigente. > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > ************************* AVISO LEGAL ************************* > Este mensaje electrónico está dirigido exclusivamente a sus destinatarios, > pudiendo contener documentos anexos de carácter privado y confidencial. > Si por error, ha recibido este mensaje y no se encuentra entre los > destinatarios, por favor, no use, informe, distribuya, imprima o copie su > contenido por ningún medio. Le rogamos lo comunique al remitente y borre > completamente el mensaje y sus anexos. El Instituto de Salud Carlos III no > asume ningún tipo de responsabilidad legal por el contenido de este mensaje > cuando no responda a las funciones atribuidas al remitente del mismo por la > normativa vigente. > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Intentemos entender su problema, corra el siguiente código, aunque ahora no calculemos frecuencias a <- c() b <- c(1,2,3) length(a) length(b) Entiendo que usted quiere salidas como las que está viendo pero con frecuencias. Usted tiene algo de 18 edades, podría hacer algo como Edad_2_años <- de la forma que le sea más fácil "años =2" Sería algo como (prueba esto en R) Edad_2_años <- c(2,2,2,2,2,2,2,2,2) length(Edad_2_años) Pero tendría que acomodar sus datos y utilizar alguna función tipo lapply, doBy, ... o escribir bucles para todas sus provincias. Javier Marcuzzi -----Mensaje original----- From: ppueyo en isciii.es Sent: Thursday, March 01, 2012 8:31 AM To: izquierdo ; r-help-es en r-project.org Subject: Re: [R-es] Frecuencias Bueno, he de decir que he mirado los dos métodos que me habeis sugerido, que son muy parecidos; aun asà no me ha funcionado se queja de la longitud diferente de vectores .... El caso es que he pensado otra forma de hacer, más larga, pero creo que efectiva, el problema es que tampoco funciona, y no sé porqué, porque lo veo muy sencillo (me llevo mal con R) os pongo un poco el caso a ver si podéis ver algún fallo de sintaxis y lo entendéis: Tengo 18 grupos de edad (del 1 al 18), pero al pedir las precuencias, es posible que haya grupos de edad sin representación, por tanto necesitarÃa un 0. En este caso: Tabla "frech" grupo frecuencia 5 "5" "1" 6 "6" "1" 7 "7" "3" 8 "8" "2" 9 "9" "5" 10 "10" "20" 11 "11" "20" 12 "12" "31" 13 "13" "39" 14 "14" "54" 15 "15" "66" 16 "16" "54" 17 "17" "23" 18 "18" "12" Asà que pensé en una función IF, de tal modo que si el primer grupo era igual a "1" , entonces me escibiese la frecuencia en otra columna que habÃa creado previamente f99h<-c( ) En caso contrario, que me escribiese un "0". Ã?ste es el código que he utilizado, y no me hace nada....> if(frech[,1]=="1"){+ f99h[1,1]=frech[1,2] + f99h[1,1]<-0} Está claro que si yo pidiera f99h, el primer número tendrÃa que ser un "0", pero no lo hace.... y asà lo tengo que hacer con los 17 grupos restantes; me imagino que habrá una forma más rápida, pero ya os digo que lo del "factor(levels......" no me funciona. ¿Se podrÃa iterar la función IF en un bucle for? porque ahora son 18 grupos y no me supone mucho tiempo, pero cuando tenga 18 grupos divididos en 52 provincias.... me acabaré cortando las venas.... jejeje Un saludo, y gracias Pablo ----- Mensaje original ----- De: izquierdo Para: r-help-es en r-project.org Enviado: 27/02/2012 14:02:07 Asunto: Re: [R-es] Frecuencias Lo primero que tienes que hacer es mirar los levels de tu variable de edades, los que no aparecenahà no van a aparecer en la tabla, yo harÃa una cosa asÃ:> Edades <- c(15,16,19,20,20) > table(Edades)Edades 15 16 19 20 1 1 1 2> levels(factor(Edades))[1] "15" "16" "19" "20"> lab <- factor(max(Edades):min(Edades)) > EdadesFactor <- factor(Edades, levels=lab) > table(EdadesFactor)EdadesFactor 20 19 18 17 16 15 2 1 0 0 1 1 Espero que te sirva. Un saludo, Pelayo On Mon, 27 Feb 2012 14:25:04 +0100, ppueyo en isciii.es wrote:> Hola a tod en s: > > Tengo una duda sobre la salida de la tabla de frecuencias de R. > > Estoy utilizando la función table, para que me saque el numero de > casos agrupados por edades; el caso, es que si no hay de una edad, > necesito que me ponga un 0; o un NA, algo para que luego pueda > utilizar los vectores de salida para seguir haciendo operaciones y > que > no se me queje de la longitud, habrÃa alguna forma? > > La opción que habÃa pensado, aunque no se muy bien como llevarla a > cabo, serÃa crear un vector de "0" y con funciones "IF", que me lo > reescribiera con las frecuencias sacadas de la función table. > > Un saludo, > > Pablo > > > ************************* AVISO LEGAL ************************* > Este mensaje electrónico está dirigido exclusivamente a sus > destinatarios, > pudiendo contener documentos anexos de carácter privado y > confidencial. > Si por error, ha recibido este mensaje y no se encuentra entre los > destinatarios, por favor, no use, informe, distribuya, imprima o > copie su > contenido por ningún medio. Le rogamos lo comunique al remitente y > borre > completamente el mensaje y sus anexos. El Instituto de Salud Carlos > III no > asume ningún tipo de responsabilidad legal por el contenido de este > mensaje > cuando no responda a las funciones atribuidas al remitente del mismo > por la > normativa vigente. > > [[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 ************************* AVISO LEGAL ************************* Este mensaje electrónico está dirigido exclusivamente a sus destinatarios, pudiendo contener documentos anexos de carácter privado y confidencial. Si por error, ha recibido este mensaje y no se encuentra entre los destinatarios, por favor, no use, informe, distribuya, imprima o copie su contenido por ningún medio. Le rogamos lo comunique al remitente y borre completamente el mensaje y sus anexos. El Instituto de Salud Carlos III no asume ningún tipo de responsabilidad legal por el contenido de este mensaje cuando no responda a las funciones atribuidas al remitente del mismo por la normativa vigente. [[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
Hola, Otro método, antes de que te cortes las venas y dejes de utilizar R... Utilizando tus propios datos: ################################## Lines<-"id grupo frecuencia 5 5 1 6 6 1 7 7 3 8 8 2 9 9 5 10 10 20 11 11 20 12 12 31 13 13 39 14 14 54 15 15 66 16 16 54 17 17 23 18 18 12 " #Cargo tus datos d.f <- read.table(textConnection(Lines), as.is = TRUE, header=T) # Crear un vector de grupos extendido grupo.otro<-seq(1:max(d.f$grupo)) # Data.frame casi final... # Merge del data.frame original y el grupo.extendido df.good<-merge(d.f, grupo.otro, by.x="grupo", by.y=1, all.y=T ) #Limpio para quitar los NA df.good$frecuencia[is.na(df.good$frecuencia)]<-0> df.good grupo id frecuencia1 1 NA 0 2 2 NA 0 3 3 NA 0 4 4 NA 0 5 5 5 1 6 6 6 1 7 7 7 3 8 8 8 2 9 9 9 5 10 10 10 20 11 11 11 20 12 12 12 31 13 13 13 39 14 14 14 54 15 15 15 66 16 16 16 54 17 17 17 23 18 18 18 12 ############################## Saludos, Carlos Ortega www.qualityexcellence.es El 1 de marzo de 2012 13:08, Jorge I Velez <jorgeivanvelez@gmail.com>escribió:> Hola Patricio, > > Quizas podria servirte lo siguiente: > > # datos > datos <- structure(list(grupo = 5:18, frecuencia = c(1L, 1L, 3L, 2L, 5L, > 20L, 20L, 31L, 39L, 54L, 66L, 54L, 23L, 12L)), .Names = c("grupo", > "frecuencia"), class = "data.frame", row.names = c("5", "6", > "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", > "18")) > > # funcion > foo <- function(edad, d){ > res <- with(d, match(edad, grupo)) > ifelse(is.na(res), 0, unlist(d[res, 2])) > } > > # ejemplos > foo(6, datos) > #[1] 1 > foo(18, datos) > #[1] 12 > foo(99, datos) > #[1] 0 > > Un saludo, > Jorge.- > > > 2012/3/1 <> > > > Bueno, he de decir que he mirado los dos métodos que me habeis sugerido, > > que son muy parecidos; aun así no me ha funcionado se queja de la > longitud > > diferente de vectores .... > > El caso es que he pensado otra forma de hacer, más larga, pero creo que > > efectiva, el problema es que tampoco funciona, y no sé porqué, porque lo > > veo muy sencillo (me llevo mal con R) os pongo un poco el caso a ver si > > podéis ver algún fallo de sintaxis y lo entendéis: > > > > Tengo 18 grupos de edad (del 1 al 18), pero al pedir las precuencias, es > > posible que haya grupos de edad sin representación, por tanto necesitaría > > un 0. > > > > En este caso: > > > > Tabla "frech" > > > > grupo frecuencia > > 5 "5" "1" > > 6 "6" "1" > > 7 "7" "3" > > 8 "8" "2" > > 9 "9" "5" > > 10 "10" "20" > > 11 "11" "20" > > 12 "12" "31" > > 13 "13" "39" > > 14 "14" "54" > > 15 "15" "66" > > 16 "16" "54" > > 17 "17" "23" > > 18 "18" "12" > > > > Así que pensé en una función IF, de tal modo que si el primer grupo era > > igual a "1" , entonces me escibiese la frecuencia en otra columna que > había > > creado previamente f99h<-c( ) > > En caso contrario, que me escribiese un "0". > > Éste es el código que he utilizado, y no me hace nada.... > > > > > if(frech[,1]=="1"){ > > + f99h[1,1]=frech[1,2] > > + f99h[1,1]<-0} > > > > Está claro que si yo pidiera f99h, el primer número tendría que ser un > > "0", pero no lo hace.... > > y así lo tengo que hacer con los 17 grupos restantes; me imagino que > habrá > > una forma más rápida, pero ya os digo que lo del "factor(levels......" no > > me funciona. ¿Se podría iterar la función IF en un bucle for? porque > ahora > > son 18 grupos y no me supone mucho tiempo, pero cuando tenga 18 grupos > > divididos en 52 provincias.... me acabaré cortando las venas.... jejeje > > > > Un saludo, y gracias > > Pablo > > > > > > > > > > > > ----- Mensaje original ----- > > De: izquierdo > > Para: r-help-es@r-project.org > > Enviado: 27/02/2012 14:02:07 > > Asunto: Re: [R-es] Frecuencias > > > > > > Lo primero que tienes que hacer es mirar los levels de tu variable de > > edades, los que no aparecenahí no van a aparecer en la tabla, yo haría > > una cosa así: > > > > > Edades <- c(15,16,19,20,20) > > > table(Edades) > > Edades > > 15 16 19 20 > > 1 1 1 2 > > > levels(factor(Edades)) > > [1] "15" "16" "19" "20" > > > lab <- factor(max(Edades):min(Edades)) > > > EdadesFactor <- factor(Edades, levels=lab) > > > table(EdadesFactor) > > EdadesFactor > > 20 19 18 17 16 15 > > 2 1 0 0 1 1 > > > > Espero que te sirva. > > Un saludo, > > > > Pelayo > > > > > > On Mon, 27 Feb 2012 14:25:04 +0100, <ppueyo@isciii.es> wrote: > > > Hola a tod@s: > > > > > > Tengo una duda sobre la salida de la tabla de frecuencias de R. > > > > > > Estoy utilizando la función table, para que me saque el numero de > > > casos agrupados por edades; el caso, es que si no hay de una edad, > > > necesito que me ponga un 0; o un NA, algo para que luego pueda > > > utilizar los vectores de salida para seguir haciendo operaciones y > > > que > > > no se me queje de la longitud, habría alguna forma? > > > > > > La opción que había pensado, aunque no se muy bien como llevarla a > > > cabo, sería crear un vector de "0" y con funciones "IF", que me lo > > > reescribiera con las frecuencias sacadas de la función table. > > > > > > Un saludo, > > > > > > Pablo > > > > > > > > > ************************* AVISO LEGAL ************************* > > > Este mensaje electrónico está dirigido exclusivamente a sus > > > destinatarios, > > > pudiendo contener documentos anexos de carácter privado y > > > confidencial. > > > Si por error, ha recibido este mensaje y no se encuentra entre los > > > destinatarios, por favor, no use, informe, distribuya, imprima o > > > copie su > > > contenido por ningún medio. Le rogamos lo comunique al remitente y > > > borre > > > completamente el mensaje y sus anexos. El Instituto de Salud Carlos > > > III no > > > asume ningún tipo de responsabilidad legal por el contenido de este > > > mensaje > > > cuando no responda a las funciones atribuidas al remitente del mismo > > > por la > > > normativa vigente. > > > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > > ************************* AVISO LEGAL ************************* > > Este mensaje electrónico está dirigido exclusivamente a sus > destinatarios, > > pudiendo contener documentos anexos de carácter privado y confidencial. > > Si por error, ha recibido este mensaje y no se encuentra entre los > > destinatarios, por favor, no use, informe, distribuya, imprima o copie su > > contenido por ningún medio. Le rogamos lo comunique al remitente y borre > > completamente el mensaje y sus anexos. El Instituto de Salud Carlos III > no > > asume ningún tipo de responsabilidad legal por el contenido de este > mensaje > > cuando no responda a las funciones atribuidas al remitente del mismo por > la > > normativa vigente. > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > [[alternative HTML version deleted]] > > > _______________________________________________ > 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]]
Hola! En relación a Frecuencias (aunque creo que me he perdido un poco en el hilo de la discusión): Si lo que quieres es una frecuencia normal y corriente de un factor a mi me funciona perfectamente la función freq() del paquete "descr". Con esta función no sólo haces la frecuencia sino que además puedes definir perdidos del usuario, utilizar ponderación y, a no ser que le digas lo contrario, te dibuja el gráfico de forma automática. Además es perfectamente compatible con xtable y fácil de guardar como data.frame o matrix. En el paquete también hay alguna otra maravilla como crosstab con ponderación. Espero que te sirva, y si no era esto espero que le sirva a algún otro. Hasta pronto! Manel. PD: perdón por repetir, pero creo que mi mail anterior se leía mal [[alternative HTML version deleted]]