Francisco Javier
2017-Feb-01 19:25 UTC
[R-es] 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) } Muchas gracias por cualquier ayuda! [[alternative HTML version deleted]]
Francisco Javier
2017-Feb-06 19:15 UTC
[R-es] Perfiles longitudinales con eje de abscisas adaptado a cada individuo
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]]