2016-04-29

Análisis de tendencia en formato tabular en R

Title

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

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos