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
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.
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.
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.
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=
: sum
, mean
, ...
tapply(<<columna en la que se ejecuta la función de agregación>>, <<columna que agrupa>>, <<función>>)
6. Gráficos
plot(<<x>>, <<y>>)
- Argumentos adicionales:
main="Título del gráfico"
type="l"
: gráfico de líneas.
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
(red
, blue
, ... 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, 3
para 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.
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$columna
, datos[[columna]]
o datos[,columna]
datos <- read.csv("archivo.csv", header=TRUE, sep=",")
8. Paquetes
install.packages("paquete")
library(paquete)
: se tiene que ejecutar para poder usar el paquete.
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/.