[R-es] Perfiles longitudinales con eje de abscisas adaptado a cada individuo

Francisco Javier iterador10 en hotmail.com
Lun Feb 6 20:15:32 CET 2017


Hola,


Por si a alguien le sirve, he encontrado una posible solución a la duda que me planteaba en este mismo hilo el pasado 1 de febrero:


par(mfrow = c(2, 1), las = 1)
for(i in 1:length(unique(dt$id))) {
  kat <- factor(dt$id, labels = 1:length(unique(dt$id)))
  maxid <- max(table(dt$id))
  plot(seq(from = min(dt$edad[kat == i]), to = max(dt$edad[kat == i])), dt$valor[kat == i],
     pch = 16, xaxt = "n", xlab ="", ylab = "", main = "",
     xlim = c(  min(dt$edad[kat == i]) , min(dt$edad[kat == i]) + maxid - 1 ), ylim = c(0, max(dt$valor)))
  axis(1, at = seq(from = min(dt$edad[kat == i]), to = min(dt$edad[kat == i]) + maxid - 1))
  mtext("edad", side = 1, line = 2.5)
  mtext(bquote(.(unique(dt$id)[i])), side = 3, line = 0.5)
  }


Saludos.


________________________________
De: Francisco Javier <iterador10 en hotmail.com>
Enviado: miércoles, 01 de febrero de 2017 20:25
Para: r-help-es en r-project.org
Asunto: Perfiles longitudinales con eje de abscisas adaptado a cada individuo


Buenas tardes a todo el mundo,


Sirva como ejemplo el siguiente data frame con datos longitudinales de 2 individuos:

dt <- data.frame(id = rep(c(1,2), c(3,5)),

        edad = c(50,51,52,43,44,45,46,47),

        valor = c(220,450,540,320,570,200,700,100))


Querría representar (sin recurrir a ningún package) el perfil de los 2 individuos de modo que en cada eje de abscisas:
a) La primera edad de cada individuo es su primera edad con valor (edades enteras anuales).
b) Para cada id hayan el mismo número de ticks, que será igual al número de mediciones del individuo con más valores (id=2 con 5 valores)

El código siguiente hace "casi" lo que deseo, pero el inconveniente es que el eje de abscisas que queda escrito siempre va desde 1 hasta 5, y lo

que querría es que en id=1 fuese {50,51,52,53,54} (aunque no haya datos en las edades 53 y 54), mientras que en id=2 debería de poner {43,44,45,46,47}.


par(mfrow = c(2, 1), las = 1)

for(i in 1:length(unique(dt$id))) {
   kat <- factor(dt$id, labels = 1:length(unique(dt$id)))
   plot(dt$valor[kat == i],
   pch = 16, xaxt = "n", xlab ="", ylab = "", main = "",
   xlim = c(1, max(table(dt$id))), ylim = c(0, max(dt$valor)))
   axis(1, at = 1:max(table(dt$id)))
   mtext("edad", side = 1, line = 2.5)
   mtext( bquote( .(unique(dt$id)[i])), side = 3, line = 0.5)
 }


[[elided Hotmail spam]]

	[[alternative HTML version deleted]]



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