Skip to content

[R-es] Gr=?US-ASCII?Q?=E1?=fico xyplot

7 messages · guivivi en alumni.uv.es, Olivier Nuñez, Luciano Selzer

#
Hola a todos,

Tengo que construir un gráfico para una base de datos que tengo en el 
que representar para los individuos de esta base su altura vs peso en 
función de su edad.
Para ello, hay que utilizar los gráficos condicionados.
En primer lugar usé la función coplot pero cargando el paquete lattice 
se pueden utilizar funciones que generan gráficos más completos, como 
es el caso de la función que quiero usar, xyplot.
En el caso más sencillo, con hacer:
xyplot(PESO~ALTURA|EDAD,data=Data,xlab="ALTURA",ylab="PESO") ya está.

El problema que tengo surge cuando quiero dividir la edad en tres (por 
ejemplo) intervalos equivalentes con el mismo rango.
Leyendo un manual de ayuda, se sugiere seguir estos pasos:
(Para leer la base de datos quakes, una vez cargado el paquete lattice, 
desde la consola de R se hace >quakes).

mini <- min(quakes$depth)
maxi <- max(quakes$depth)
int <- ceiling((maxi-mini)/9) (9 intervalos)
inf <- seq(mini,maxi,int)
quakes$depth.cat <- factor(floor(((quakes$depth-mini)/int)),labels=paste
(inf,inf+int,sep="-"))
xyplot(long~lat|depth.cat,data=quakes)

Estas líneas hacen justo lo que necesito, pero no entiendo para qué se 
hace floor(((quakes$depth-mini)/int)).
Tengo claro que así identifica los mismos números que resultan de esta 
operación con el mismo intervalo de (inf,inf+int,sep="-") pero lo que 
quiero decir es que no entiendo la idea que te lleva a restar cada 
elemento de la columna depth menos el mínimo y luego dividir por int.

Cualquier ayuda será de utilidad, incluso para otras maneras de dividir 
los valores de una columna en intervalos equivalentes.
(La función ?equal.count no me sirve porque se solapan datos).

Muchas gracias.
#
Echa un vistazo a la función cut().
Un saludo. Olivier
--   
____________________________________

Olivier G. Nuñez
Email: onunez en iberstat.es
Tel : +34 663 03 69 09
Web: http://www.iberstat.es

____________________________________




El 11/11/2009, a las 9:45, <guivivi en alumni.uv.es> escribió:
#
Hola,

Gracias por contestar. Sí, la función cut() me divide los datos en tres 
intervalos, se me había olvidado ponerlo, lo que me ocurre en este caso 
es que no sé como incorporar esto a la función xyplot.

Un saludo
#
Hola, que tal?
lo que está haciendo esa linea de comando es restarle el minimo a
depth, lo divide por el número que divide a la variable en nueve
intervalos y después lo redondea hacia abajo.
Otra opción más compacta es usar la función cut que hace exactamente
lo mismo, usa ?cut para ver la ayuda.
Luciano



El día 11 de noviembre de 2009 05:45,  <guivivi en alumni.uv.es> escribió:
#
Hola, no había visto los mensajes anteriores. Para incorporarlo a al
xyplot puedes usar el comando cut con sus opciones en la llamada de
xyplot

xyplot(PESO~ALTURA|cut(EDAD, breaks=3),data=Data,xlab="ALTURA",ylab="PESO")

Otra opción es crear una nueva variable donde guardes los resultados
de cut y llames a esa variable en la función xyplot en vez de la
variable edad.
Espero que te sirva de ayuda.
Un saludo
Luciano



El día 11 de noviembre de 2009 05:57,  <guivivi en alumni.uv.es> escribió:
#
Hola,

Me encuentro ahora con un problema con la función cut y es que me 
divide las edades en tres intervalos pero los límites de esos 
intervalos son números decimales cuando la edad viene en números 
naturales.
¿Los puedo redondear?, parece que ni floor ni ceiling me sirven.

Gracias y un saludo
breaks=3),data=Data,xlab="ALTURA",ylab="PESO")
escribió:
tres
caso
#
Hola, si te fijas en la ayuda dice que con el argumento breaks puedes
poner el número de intervalos en que quieres dividir la variable o los
cortes donde poner la variable. Pienso que yo haria algo parecido al
ejemplo que mandaste vos.

int<-ceiling((max(edad)-min(edad))/3) #largo del intervalo
cortes<-seq(min(edad),max(edad),int) #Creo los lugares donde cortar
edad.cat<-cut(edad,breaks=cortes)

No lo he probado así que quizá tenga algún error, pero eso debería funcionar

Luciano



El día 11 de noviembre de 2009 09:56,  <guivivi en alumni.uv.es> escribió: