Problema
Tenemos unos datos que representamos gráficamente. Deseamos crear una tabla con los datos agrupados por site y parameter, y añadir una columna que nos indique la tendencia.
# Ver apartado inferior Datos para crea el data frame df
library(ggplot2)
ggplot(df, aes(x = YEAR, y = value, col = parameter)) + geom_line(aes(group = parameter)) + facet_wrap(~siteID)
Solución
Una solución básica es transformar el data frame en un formato ancho (wide) y luego añadir una columna en la que establecemos las condiciones para: creciente, decreciente o sin tendencia. En nuestro ejemplo, establecemos que no hay tendencia si la variación es de +-2.
df <- dcast(df, siteID + parameter ~ YEAR, value.var="value")
df$trend <- ifelse(df$`2014`-df$`2011`>2, "creciente",
ifelse(df$`2014`-df$`2011`< -2, "decreciente", "sin tendencia"))
df
siteID parameter 2011 2012 2013 2014 trend
1 site1 A 1 2 3 4 creciente
2 site1 B 10 20 30 40 creciente
3 site1 C 12 14 16 18 creciente
4 site1 D 5 10 15 20 creciente
5 site2 A 3 6 9 12 creciente
6 site2 B 17 16 13 18 sin tendencia
7 site2 C 16 18 22 15 sin tendencia
8 site2 D 17 16 10 11 decreciente
9 site3 A 7 5 3 1 decreciente
10 site3 B 15 17 20 19 creciente
11 site3 C 15 17 16 18 creciente
12 site3 D 13 16 19 11 sin tendencia
13 site4 A 8 7 6 5 decreciente
14 site4 B 50 40 30 20 decreciente
15 site4 C 16 14 12 10 decreciente
16 site4 D 20 15 10 5 decreciente
Datos
df <- structure(list(siteID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("site1", "site2",
"site3", "site4"), class = "factor"), YEAR = structure(c(1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("2011",
"2012", "2013", "2014"), class = "factor"), parameter = structure(c(1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("A",
"B", "C", "D"), class = "factor"), value = c(1, 2, 3, 4, 10,
20, 30, 40, 12, 14, 16, 18, 5, 10, 15, 20, 3, 6, 9, 12, 17, 16,
13, 18, 16, 18, 22, 15, 17, 16, 10, 11, 7, 5, 3, 1, 15, 17, 20,
19, 15, 17, 16, 18, 13, 16, 19, 11, 8, 7, 6, 5, 50, 40, 30, 20,
16, 14, 12, 10, 20, 15, 10, 5)), .Names = c("siteID", "YEAR",
"parameter", "value"), row.names = c(NA, -64L), class = "data.frame")
Entradas relacionadas
- Convertir de formato largo a ancho usando una función de agregación en R
- Agregar datos en R con el paquete reshape2
- Múltiples valores y funciones de agregación con reshape2 y plyr
Referencias