11. R

11.1. Introducción

  • R es un lenguaje de programación destinado a científicos de datos (estadísticas, análisis de datos) por su simplicidad y capacidad para tratar y analizar gran cantidad de información. Permite calcular funciones estadísticas como la media o la varianza, crear gráficos de muchos tipos, hacer regresiones lineales, y muchas otras cosas.
  • Se puede instalar tanto en Windows como en Linux, a través de una consola de comandos o con scripts (archivos con formato .R). Para cargar un script desde la consola, se ejecuta el siguiente comando:
source("C:\Users\user\elec_merc.R", encoding="UTF-8") #WINDOWS
source("/home/user/archivo.R", encoding="UTF-8") #LINUX

11.2. Vectores

  • Es la unidad básica para almacenar datos. Genera una fila de datos
  • a = c(2,6,4)
  • a <- c(1,3,5): Se suele usar <- para asignar datos a una variable más que =.
  • a <- 1:5: asigna a a la serie de números desde uno a cinco.
  • a[1]: para hacer referencia a un elemento se usan índices, que empiezan en 1.
  • names(a) <- c("col1", "col2", "col3"): Para darle un nombre a cada columna:
    col1    col2    col3
    1 3 5
  • vector(length=0): crea un vector vacío.

11.3. Matrices

  • Almacena datos en filas y columnas. Por defecto rellena por columnas, es decir, de arriba a abajo.
  • m <- matrix(1:9, nrow=3)nrow indica el número de filas. Lógicamente la longitud de la matriz debe ser un múltiplo o submúltiplo del número de filas.
        [,1] [,2] [,3]
    [1,] 1 4 7
    [2,] 2 5 8
    [3,] 3 6 9
  • m <- matrix(1:9, byrow=TRUE, nrow=3)byrow indica que rellene por filas, de izquierda a derecha
  • m[<<fila>>,<<columna>>]: para hacer referencia a un elemento de la matriz. Recuerda que los índices empiezan en 1. Para seleccionar todas las columnas o todas las filas, deja la correspondiente parte en blanco: m[,1]
  • colnames(m) <- c("col1", "col2")
  • rownames(m) <- c("fila1", "fila2")
  • m[,"col2"]
  • m <- cbind(m, c(2,3)): añade una columna al final de una matriz. rbind para añadir una fila.

11.4. Funciones aritméticas y estadísticas

  • Se pueden hacer operaciones aritméticas con los vectores y matrices: se pueden sumar, restar, multiplicar, dividir, etc. Se ejecuta la operación por elemento del matriz o vector (el primero con el primero, el segundo con el segundo, etc.).
    • c(1,3) + c(2,4): Resultado: 3 7
    • matrix(1:4, nrow=2) * matrix(2:5, nrow=2)
  • Además se pueden calcular las siguientes funciones estadísticas:
    • mean(<<datos>>): calcula la media.
    • colMeans(<<datos>>): calcula la media de cada columna.
    • rowMeans(<<datos>>): calcula la media de cada fila.
    • sd(<<datos>>): calcula la desviación típica.
    • summary(<<datos>>): calcula las funciones más comunes de una vez.
    • max(<<datos>>)
    • min(<<datos>>)
    • range(<<datos>>): calcula el rango de los datos, es decir, el mínimo y el máximo.

11.5. Filtrar y agrupar datos

subset(<<datos>>,  <<condicion>>)
  • Filtra datos en base a una o varias condiciones
  • < > <= >= ==
  • <<condicion>> & <<condicion>>: indica que tiene que cumplir ambas condiciones.
  • Para fechas, formatea primero (consulta más abajo)
x = aggregate(<<columna en la que se ejecuta la función de agregación>>, by=list(<<columna que agrupa>>), FUN=<<función>>)
  • Agrupa los datos de una columna según los valores de otra columna .
  • FUN=summean, ...
tapply(<<columna en la que se ejecuta la función de agregación>>, <<columna que agrupa>>, <<función>>)

11.6. Gráficos

  • plot(<<x>>, <<y>>)
  • Argumentos adicionales:
    • main="Título del gráfico"
    • type="l": gráfico de líneas.
      • "l", "p", "b",
    • xlab="Título del eje X"
    • ylab="Título del eje Y"
    • ylim=<<vector>>: indica los límites del eje Y
    • xlim=<<vector>>
    • cex=<<tamaño>>
    • pch=<<tipo de puntos (en número)>>
    • col=<<vector de colores>>: indica el color de la línea (redblue, ... rainbow(<<núm. colores>>))
    • las=2: coloca las etiquetas de forma perpendicular al eje
  • Para usar fechas en gráficos correctamente, hay que formatearlas antes (consulta más abajo)
  • par(mfrow=c(<<filas>>,<<columnas>>)): Para mostrar varios gráficos en un grupo.
  • lines(<<x>>, <<y>>): sirve para añadir más líneas al mismo gráfico.
  • points(<<x>>, <<y>>)
  • abline(h=<<dato>>): añade una línea horizontal al gráfico, v= para línea vertical.
  • text(<<posición x>>, <<posición y>>, <<texto>>): inserta un texto dentro del gráfico
  • barplot(<<y>>, names.arg=<<etiquetas en el eje X>>): gráfico de barras.
  • axis(1, at=seq(min(merc.y17.gr_sem$Semana), max(merc.y17.gr_sem$Semana), 4.5), labels=meses): edita uno de los ejes (1 para el inferior, 2 para el eje izquierdo, 3para el superior, 4 para el derecho).
    • labels indica el vector de nombres para el eje, at el número de etiquetas o "tics".
  • cex.names=<<valor entre 0 y 1>> indica el tamaño de las etiquetas.
  • legend("topright", legend=c("7h", "14h", "18h", "21h", "23h"), col=rainbow(5), lty=1)
  • mtext("Título", side=3, outer=TRUE, line=-1, cex=1): Crea un título global.

11.7. Importar datos

  • Para importar un archivo con datos:
  • datos <- read.table("C:/Users/user/archivo.txt", header=TRUE, sep="\t", dec=",", encoding="UTF-8")
    • sep="\t": indica que los datos están separados por tabulaciones
    • dec=",": indica el carácter que separa los decimales
    • header=TRUE: indica que los datos tienen una cabecera con los nombres de las columnas
  • El archivo se convierte en un dataFrame.
  • Para hacer referencia a las columnas se usa datos$columnadatos[[columna]] o datos[,columna]
  • datos <- read.csv("archivo.csv", header=TRUE, sep=",")

11.8. Paquetes

  • install.packages("paquete")
  • library(paquete): se tiene que ejecutar para poder usar el paquete.

11.9. Otras funciones

  • load("ruta/archivo.RData")
  • print(<<función>>): muestra el resultado de la función en la pantalla (cuando se usan archivos R)
  • save.image("archivo.RData")
  • head(datos, [n=<<número filas>>]): muestra las primeras filas de una tabla
  • tail(datos, [n=<<número filas>>]): muestra las últimas filas de una tabla
  • x = datos$CONSUMO
  • datos.x = datos$CONSUMO
  • cortes = seq(0,100,by=20)
  • datos[order(-datos$COLUMNA3),]: ordena según la columna de forma descendiente (-).
  • fechas = as.Date(fechas, <<formato>>): formatea datos como fechas.
    • formato: %d, %m, %Y, %b (mes en letra), %a (día de la semana),...
seq(as.Date("2018-01-01"), as.Date("2018-12-31"), 7)
  • Días y horas: strptime(<datos>, <formato>)
    • formato: "%Y-%m-%d %H:%M:%S"
  • hist(x, breaks=cortes, main="titulo", xlab="eje x", xlim=c(0,2000))
  • electricidad$YEAR=format(as.Date(electricidad$FECHA), "%Y")
  • mfac=factor(elecmes$mes, levels=month.name)
  • sort(mfac)
  • barplot(elecmes[order(mfac),]$consumo, names.arg=sort(mfac), cex.names=0.5)
  • colfunc <- colorRampPalette(c("red", "green"))
  • pal <- colfunc(max(mtcars$mpg))[mtcars$mpg]
  • barplot(mtcars$mpg, names.arg=rownames(mtcars), las=2, cex.names=0.5, main="Coches", ylab="mpg", col=list(pal))
  • png("mes.png", width=700)
  • barplot(elecmes$consumo, names.arg=elecmes$mes, cex.names=0.5)
  • dev.off() #Cierra el archivo
  • dev.new(): para crear varios archivos PDF por ejemplo
  • Ejemplo de función:
suavizar <- function(y, alpha=0.1){
sm <- y[1]
ret <- vector(length=0)
for (val in y){
ret <- append(ret, sm)
sm <- alpha * val + (1 - alpha) * sm
}
return (ret)
}
  • table(<datos>): crea una tabla con cada elemento y su frecuencia absoluta.
  • cbind(table(cut(<datos>, breaks=<intervalos>, right=FALSE))): calcula la frecuencia absoluta de los intervalos (seq) y coloca el resultado en una columna.
  • Página con información útil: http://www.r-tutor.com/.