@nick-eng prácticamente respondió todo (+1)! Solo pensé que podría añadir algunos ejemplos para ilustrar sus puntos y mostrar por qué el formato largo (tu primera tabla) es más eficiente para trabajar, especialmente cuando estás trabajando con los paquetes R
de Hadley Wickham como ggplot2
y plyr
. Pero debo decir que a menudo prefiero utilizar el formato ancho al reportar valores promedio en manuscritos.
-- Inicio edición --
Como @ttnphns señala acertadamente (ver comentario bajo la pregunta del OP), muchos análisis requieren que los datos estén en formato largo, mientras que los análisis multivariados suelen necesitar que las variables dependientes estén como columnas individuales. Esto también se aplica a medidas repetidas cuando se analizan con la función Anova
del paquete car
.
-- Fin edición --
Usé tu primera tabla y la leí en R
. Con la función dput()
, puedo hacer que R
imprima los datos en la consola desde donde los puedo copiar y pegar aquí para que otras personas puedan trabajar con ellos fácilmente:
d <- structure(list(Season = structure(c(4L, 4L, 4L, 2L, 2L, 2L, 3L,
3L, 3L, 1L, 1L, 1L), .Label = c("Fall", "Spring", "Summer", "Winter"
), class = "factor"), Type = structure(c(3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L), .Label = c("Expenses", "Profit",
"Sales"), class = "factor"), Dollars = c(1000L, 400L, 250L, 1170L,
460L, 250L, 660L, 1120L, 300L, 1030L, 540L, 350L)), .Names = c("Season",
"Type", "Dollars"), class = "data.frame", row.names = c(NA, -12L
))
Crea un gráfico usando ggplot2
:
require(ggplot2)
ggplot(d, aes(x=Season, y=Dollars)) + geom_bar(stat="identity", fill="grey") +
# Especialmente para la siguiente línea necesitas los datos en formato largo
facet_wrap(~Type)
Resumir datos y calcular promedio y error estándar:
require(plyr)
d.season <- ddply(d, .(Season), summarise, MEAN=mean(Dollars),
ERROR=sd(Dollars)/sqrt(length(Dollars)))
Crea otro gráfico usando ggplot2
utilizando los datos resumidos d.season
:
ggplot(d.season, aes(x = Season, y = MEAN)) +
geom_bar(stat = "identity", fill = "grey") +
geom_errorbar(aes(ymax = MEAN + ERROR, ymin = MEAN - ERROR), width = 0.2) +
labs(y = "Dollars")
Ahora, cambiando entre el formato ancho y largo usando las funciones dcast()
y melt()
del paquete reshape2
. Ten en cuenta que los datos ahora estarán ordenados alfabéticamente:
require(reshape2)
De largo a ancho:
d.wide <- dcast(d, Season ~ Type, value.var = "Dollars")
> d.wide
Season Expenses Profit Sales
1 Fall 540 350 1030
2 Spring 460 250 1170
3 Summer 1120 300 660
4 Winter 400 250 1000
De ancho a largo:
d.long <- melt(d.wide, id.vars = "Season", variable.name = "Type", value.name = "Dollars")
> d.long
Season Type Dollars
1 Fall Expenses 540
2 Spring Expenses 460
3 Summer Expenses 1120
4 Winter Expenses 400
5 Fall Profit 350
6 Spring Profit 250
7 Summer Profit 300
8 Winter Profit 250
9 Fall Sales 1030
10 Spring Sales 1170
11 Summer Sales 660
12 Winter Sales 1000
Compara con el marco de datos original (no ordenado alfabéticamente):
> d
Season Type Dollars
1 Winter Sales 1000
2 Winter Expenses 400
3 Winter Profit 250
4 Spring Sales 1170
5 Spring Expenses 460
6 Spring Profit 250
7 Summer Sales 660
8 Summer Expenses 1120
9 Summer Profit 300
10 Fall Sales 1030
11 Fall Expenses 540
12 Fall Profit 350
5 votos
Uno podría argumentar, sobre la base de este buen ejemplo, que los datos no tienen "variables" inherentes en absoluto, porque el número de columnas depende de cómo esos datos están formateados lógicamente. (Busca información sobre las primeras a las quintas "formas normales" para bases de datos relacionales, por ejemplo.) Las variables - y por lo tanto su cantidad - son determinadas por tu modelo.
1 votos
+1. Estoy curioso por ver referencias sobre la inferencia del tipo de una variable (ordinal/categórica/continua).
3 votos
Como dijo @Stefan en su buena respuesta, el primer formato de conjunto de datos se conoce como "largo" y el segundo se conoce como "ancho". Son equivalentes en cuanto a información, siempre y cuando la unidad de muestra en este fragmento, en este caso, sea la Temporada (juega el papel de variable ID). Algunos análisis son más fáciles de hacer o incluso pueden requerir una estructura "larga" (por ejemplo, modelos lineales generalizados, incluidos los GEE). Otros análisis requerirían una estructura "ancha" (como el ANOVA multivariante) o son preferidos (como hacer una prueba t pareada).
0 votos
@ttnphns ¡Gracias! Mi gran obstáculo era no conocer la terminología para diferenciarlos, por lo que no podía buscar en Google para aprender más sobre con lo que estaba luchando. En una pregunta de SO que hice en noviembre, dije "¿Alguien sabe si hay nombres diferentes para estos dos tipos de arrays? ... Solo estoy preguntándome si hay una distinción formal." Ahora sé que he encontrado un montón de artículos que aclaran las cosas para mí.
0 votos
@crclayton, dices
Estoy intentando desarrollar una guía sobre qué gráficos y tablas se pueden construir según la cantidad y tipos de variables que tienes. Estoy atascado en esto...
Yo diría que no hay una fuerte vinculación entre cómo se ve tu conjunto de datos y cómo se ven tus gráficos. Es cuestión de manipulación/preparación de datos programáticos. Algunos lenguajes gráficos e incluso cuadros de diálogo (SPSS, por mencionar uno) son flexibles y te permiten ingresar tanto formato amplio como largo y obtener el mismo resultado gráfico (la reestructuración necesaria de los datos se realiza de manera encubierta por el motor gráfico).