Objetivos:

Aspectos generales:

Algunos atajos útiles:

  • Ctrl+L es para limpiar consola
  • Ctrl+S es para guardar el script
  • Ctrl+R delante de cada comando es para correr ese comando y si pinto muchos corre todos esos
  • el operador de asignación en R es el “<-” (es como usar = en stata)
  • Alt + - es el shortcut para insertar “<-”
  • Ctrl + Shift + C para comentar una línea (para añadir # delante) o varias líneas (seleccionando todas las que se quieran comentar).
  • Ctrl + Shift + M para insertar “%>%” (pipe, explicación luego)

0. Ayuda en R

?table

Hay varias funciones de distintos paquetes que se llaman table.

?base::table

Los “::” indican que buscamos la función table que pertenece a la librería base.

Si conocemos la función y queremos ver argumentos lo hacemos así:

?round 

Para ver la relación que tiene con otras funciones:

apropos("table") 

Para saber en qué paquete está un comando y qué relaciones tiene con otras funciones podemos usar help.search:

help.search("trunc")

1. R para cálculo

Se tipea una operación: Operadores aritméticos: “+”, “-”, “*“,”/“,”^”

2 + 3
## [1] 5
5 - 6
## [1] -1
2 * 3
## [1] 6
3/7
## [1] 0.4285714
2^3
## [1] 8
2^-3
## [1] 0.125

2. Objetos, vectores y funciones

Un objeto es creado con el operador de asignación “<-”. (Alt + -)

a <- 5
b <- "mi objeto"

El contenido de un objeto es desplegado cuando escribimos su nombre.

a
## [1] 5
b
## [1] "mi objeto"

Los objetos son sensibles a su nombre distinguiendo entre mayúsculas y minúsculas.

Los objetos pueden tener una longitud arbitraria en sus nombres.

quelindodiahizohoy <-10
quelindodiahizohoy
## [1] 10

Crear, usar y modificar un objeto simple

  1. Numérico
x <- 2
x + 5
## [1] 7
x
## [1] 2

El objeto x no se vio modificado por la suma.

k <- x + 5
k
## [1] 7

En el objeto k ahora sí vemos el efecto de sumar 5 a x, porque utilizamos el operador de asignación “<-”.

y <- 9
x + y
## [1] 11

El valor de un objeto se puede modificar directamente.

a
## [1] 5

El objeto a tenía asignado el valor 5.

a <- 7
a
## [1] 7

Ahora tiene asignado el valor 7.

a/2
## [1] 3.5

También podemos usar operadores lógicos.

A <- 8
a==A
## [1] FALSE
  1. De caracter
b
## [1] "mi objeto"
aqui <- "flacso"
aqui
## [1] "flacso"

Para borrar un objeto que ya no queremos usar:

rm(A)
rm(a,b,k)
rm(aqui,quelindodiahizohoy)

Con rm() (corchete vacío) se borran todos los objetos creados.


Crear vectores

Los vectores son objetos que contienen varios valores.

  1. Vectores numéricos
altura <- c(167, 192, 173, 174, 172, 167, 171, 185, 163, 170)
altura
##  [1] 167 192 173 174 172 167 171 185 163 170

Los corchetes es la manera de entrar a los valores del objeto. Usamos corchetes cuando queremos recodificar valores de una variable o seleccionar algunos casos o variables de una base.

altura[2]
## [1] 192

Arroja el valor que está en la posición 2 del vector.

altura[-2]
## [1] 167 173 174 172 167 171 185 163 170

Arroja todos los elementos del vector menor la posición 2.

altura[1:3]
## [1] 167 192 173

Arroja los elementos del vector entre la posición 1 y la posición 3. El operador : sirve para generar una secuencia de valores. 1:3 equivale a c(1,2,3).

altura[c(1,3,5)]
## [1] 167 173 172

Arroja los elementos en las posiciones 1, 3 y 5.

Para cambiar un valor del vector, lo seleccionamos con su posición y le asignamos el nuevo valor.

altura[5] <- 168
altura
##  [1] 167 192 173 174 168 167 171 185 163 170

Podemos usar también expresiones lógicas al entrar a los valores del vector.

altura[altura >= 170]
## [1] 192 173 174 171 185 170

Nos muestra sólo aquellos valores del vector que cumplen la condición indicada.

Le podemos pedir las posiciones en las que están los valores que cumplen la condición con la función which().

which(altura >= 170)
## [1]  2  3  4  7  8 10
which(altura == 168)
## [1] 5

Función sort: ordena la serie de datos de menor a mayor.

sort(altura)
##  [1] 163 167 167 168 170 171 173 174 185 192

sort sólo lo muestra ordenado, pero no modifica el objeto.

altura
##  [1] 167 192 173 174 168 167 171 185 163 170

Sigue en el orden original.

altura_ord <- sort(altura)
altura_ord
##  [1] 163 167 167 168 170 171 173 174 185 192

El objeto altura_ord guarda los valores ordenados de menor a mayor.

Podemos operar sobre el vector, alterando cada observación.

altura + 20
##  [1] 187 212 193 194 188 187 191 205 183 190

Pero no modifica el vector.

altura
##  [1] 167 192 173 174 168 167 171 185 163 170

Si queremos un vector que contenga los “+ 20” debemos asignarlo a un objeto con “<-”.

altura20 <- altura + 20
altura20
##  [1] 187 212 193 194 188 187 191 205 183 190

En este ejemplo, dividimos cada observación del vector por cien (para pasar de cm a m)

altura/100
##  [1] 1.67 1.92 1.73 1.74 1.68 1.67 1.71 1.85 1.63 1.70
altura_m <- altura/100 
altura_m
##  [1] 1.67 1.92 1.73 1.74 1.68 1.67 1.71 1.85 1.63 1.70

Exponenciamos cada observación por 2 (pasar de m a m2)

altura_m^2
##  [1] 2.7889 3.6864 2.9929 3.0276 2.8224 2.7889 2.9241 3.4225 2.6569 2.8900
altura_m2 <- altura_m^2
altura_m2
##  [1] 2.7889 3.6864 2.9929 3.0276 2.8224 2.7889 2.9241 3.4225 2.6569 2.8900

Se pueden combinar objetos. Ejemplo: índice de masa corporal (IMC).

Creamos otro objeto con el peso de los individuos.

peso <- c(86, 74, 83, 50, 78, 66, 66, 51, 50, 55)
peso
##  [1] 86 74 83 50 78 66 66 51 50 55

Ahora creamos el objeto IMC con valores de peso/altura_m2)

IMC <- peso/altura_m2
IMC
##  [1] 30.83653 20.07378 27.73230 16.51473 27.63605 23.66524 22.57105 14.90139
##  [9] 18.81892 19.03114

Redondeamos valores con la función round()

round(IMC, 2)
##  [1] 30.84 20.07 27.73 16.51 27.64 23.67 22.57 14.90 18.82 19.03
IMC <- round(IMC, 2) 
IMC
##  [1] 30.84 20.07 27.73 16.51 27.64 23.67 22.57 14.90 18.82 19.03

Así sí modifico el objeto IMC (lo sobreescribo), porque la función se asigna a ese objeto

  1. Vectores de caracteres
educacion <- c("primaria", "secundaria", "preparatoria", "universidad")
educacion
## [1] "primaria"     "secundaria"   "preparatoria" "universidad"

Con vectores de caracteres también podemos usar los comandos para seleccionar valores.

educacion[3]
## [1] "preparatoria"
which(educacion == "primaria")
## [1] 1

Funciones en R

  • Tienen un nombre.
  • Tienen un argumento.
  • Regresan un resultado (valor, gráfico, leen un archivo, etc.).

Uso de los argumentos de una función. Para ver cuáles son sus argumentos, podemos recurrir a la ayuda. Ejemplo 1: función seq - crea una secuencia ordenada de valores.

?seq

Los nombres de los argumentos pueden omitirse, pero es necesario saber el orden.

seq(from=1, to=10, by=2)
## [1] 1 3 5 7 9
seq(1,10,2)
## [1] 1 3 5 7 9

Si nombramos los argumentos podemos usarlos en distinto orden.

seq(by=2, to=10, from=1)
## [1] 1 3 5 7 9
seq(2,10,1)
## [1]  2  3  4  5  6  7  8  9 10

Ejemplo 2: función rep - crea una secuencia de n valores repetidos.

?rep
rep(3,5)
## [1] 3 3 3 3 3

Usualmente aplicamos una función a objetos de R.

Función length(): da el número de elementos de un objeto.

length(altura)
## [1] 10

Función sum(): suma todos los valores de un objeto.

sum(altura)
## [1] 1730

Función mean(): da el promedio de los valores de un objeto.

mean(altura)
## [1] 173

Función var(): da la varianza de los valores de un objeto

var(altura)
## [1] 79.55556

Atención: para usar algunas funciones el objeto no puede tener valores faltantes (missing). Ejemplo: imaginemos que el segundo individuo no indica altura.

altura[2] <- NA
altura
##  [1] 167  NA 173 174 168 167 171 185 163 170

Comprobación de la existencia de valores faltantes con la función is.na().

is.na(altura)
##  [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Nos muestra para cada observación un valor lógico (TRUE o FALSE). El segundo valor es TRUE, lo que significa que ése es un valor faltante. También podemos decirle que nos sume cuántos valores faltantes tenemos en un vector.

sum(is.na(altura))
## [1] 1
sum(is.na(peso))
## [1] 0

Hay un valor faltante en el vector altura y ningún valor faltante en el vector peso. Si ahora intentamos calcular el promedio de los valores del vector altura.

mean(altura)
## [1] NA

No es posible calcular la altura del objeto porque tiene missing. Veamos qué indica la ayuda de la función.

?mean

Necesitamos usar el argumento rm.na=TRUE (“remover missing values”).

mean(altura, na.rm=TRUE)
## [1] 170.8889

Ahora calcula el valor promedio sin considerar el NA.


Resumen de funciones:

  • c(): crea un vector como una serie de valores.
  • Si son valores enteros continuos se puede usar el operador “:”
c(3,4,5,6)
## [1] 3 4 5 6
3:6
## [1] 3 4 5 6
  • seq(): crea una secuencia, indicando valor inicial, final y espaciamiento.
  • rep(): crea una secuencia de n valores iguales.
  • length(): regresa número de elementos del vector.
  • mean(): regresa el valor promedio de los elementos del vector.
  • var(): regresa la varianza de los elementos del vector.
  • sort(): ordena de menor a mayor los elementos del vector. Si añadimos la opción “decreasing”, los ordena de mayor a menor.
  • round(): redondea al número de decimales indicado.
  • is.na(): evalúa si hay valores faltantes en un objeto y devuelve valores lógicos (TRUE o FALSE).
  • sum(): suma todos los valores de un vector.
  • which(): devuelve la posición del vector que cumple la condición indicada.

Otras funciones útiles (hay muchas más):

  • min(): regresa el valor más pequeño de los elementos del vector.
  • max(): regresa el valor más grande de los elementos del vector.
  • sd(): regresa la desviación estándar de los elementos del vector.

3. Matrices (intro muy breve para manejar después bases de datos)

Las matrices son objetos de dos dimension que contienen valores numéricos o caracteres.

Para crear una matriz debemos indicar los datos, el número de filas y el número de columnas. Lo hacemos con la función matrix.

?matrix
m1 <- matrix(1:16, 4, 4)
m1
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    9   13
## [2,]    2    6   10   14
## [3,]    3    7   11   15
## [4,]    4    8   12   16

Por defecto llena la matriz de columna en columna

Con el comando dim() vemos cuántas filas y cuántas columnas tiene la matriz.

dim(m1)
## [1] 4 4

Para seleccionar un elemento específico de la matriz, hay que indicar su posición mediante fila y columna. Por ejemplo, si queremos seleccionar el elemento en la segunda fila y la cuarta columna:

m1[2, 4]
## [1] 14

También podemos seleccionar toda una fila, dejando vacío el valor de la columna:

m1[2, ]
## [1]  2  6 10 14
v1 <- m1[2, ]
v1
## [1]  2  6 10 14

Al asignárselo al objeto v1, ahora tenemos un vector con los valores de la segunda fila de la matriz m1.

O también podemos seleccionar toda la columna, dejando vacío el valor de la fila:

m1[ ,4]
## [1] 13 14 15 16
v2 <- m1[ ,4]
v2
## [1] 13 14 15 16

Ahora el vector v2 queda asignado con los valores de la cuarta columna de la matriz m1.



Ejercicio:

  1. Construye el siguiente vector:

120 134 256

  1. Ingresos percibidos en un hogar. Tenemos información sobre ingresos de hombres y mujeres de 4 hogares.
  1. Crea tres vectores. El ingreso de las mujeres debe ir en un vector “mujer”, el de los hombres en un vector “hombre” y el tamaño del hogar en un vector “tam”.
N Tamaño Mujer Hombre
1 4 1200 1450
2 2 1180 1870
3 3 1750 1690
4 2 2100 0
  1. Calcula el ingreso total de cada hogar.

  2. calcula el ingreso per cápita de cada hogar.

  3. Redondea para que quede únicamente un decimal.

  4. Calcula el ingreso mínimo y máximo de las mujeres.


  1. Trabajo con datos faltantes.
  1. Crea un vector “mujer.na” con los datos de ingresos de las mujeres, pero sustituyendo la última observación por NA.

  2. Calcula el ingreso per cápita con esos datos (“varon”, “mujer.na” y “tam”). El último valor no lo debe calcular, lo debe dejar como NA.

¡Cuidado! A veces los datos faltantes están codificados como 99, 00 ó 999. Es necesario declarar ese número como NA o lo computará como un valor normal.

  1. Crea un vector “mujer.mis” con los datos de ingresos de las mujeres, pero sustituyendo la última observación por 99. Calcula después el ingreso per cápita con esos datos (“varon”, “mujer.mis” y “tam”). Verás que arroja un valor para todos los casos, incluido el último. Ese valor no es correcto, ya que toma “99” como valor de ingreso, en vez de como valor faltante.

  2. Comprueba si los vectores “mujer”, “mujer.na” y “mujer.mis” tienen datos faltantes (declarados como missing). Usa para ello la función is.na().

  3. Podemos comprobar la diferencia entre mujer.na y mujer.mis con la función table().

table(mujer.na, mujer.mis)
##         mujer.mis
## mujer.na 99 1180 1200 1750
##     1180  0    1    0    0
##     1200  0    0    1    0
##     1750  0    0    0    1

Si no indicamos ningún argumento adicional, el valor faltante de mujer.na no aparece. En mujer.mis sí, porque no está declarado como faltante.

Para que muestre los valores faltantes, usamos el argumento “useNA”.

table(mujer.na, mujer.mis,  useNA = "always")
##         mujer.mis
## mujer.na 99 1180 1200 1750 <NA>
##     1180  0    1    0    0    0
##     1200  0    0    1    0    0
##     1750  0    0    0    1    0
##     <NA>  1    0    0    0    0
table(mujer.na, mujer.mis,  useNA = "ifany")
##         mujer.mis
## mujer.na 99 1180 1200 1750
##     1180  0    1    0    0
##     1200  0    0    1    0
##     1750  0    0    0    1
##     <NA>  1    0    0    0

Si indicamos “always”, aparecerá la opción NA aunque no exista ningún valor faltante. Si indicamos “ifany” aparecerá la opción NA sólo cuando exista algún valor faltante.

  1. Sustituye en el vector “mujer.mis” el valor 99 por NA. Tip: puedes seleccionar la posición de la observación y asignarle el valor NA.

Inciso: si tuviéramos varios valores 99 y quisiéramos sustituirlos todos por NA al mismo tiempo, lo haríamos de otra manera. Ejemplo: creamos un valor con varios valores 99 y los sustituimos todos.

mujer.namis <- c(99,1180,1750,99)
mujer.namis
## [1]   99 1180 1750   99
mujer.namis[mujer.namis == 99] <- NA
mujer.namis
## [1]   NA 1180 1750   NA
  1. Vuelve a calcular el ingreso per cápita con los datos del vector modificado: “varon”, “mujer.mis” y “tam”. Ahora ya no debe hacer el cálculo para el hogar con la observación faltante y debe arrojar NA.

  2. Calcula el ingreso mínimo y máximo del vector mujer.na, sin indicar ningún argumento adicional. Verás que da NA, por el missing.

  3. Hazo ahora usando el argumento apropiado en las funciones. Ya no debe dar NA y lo calculará sin tener en cuenta el valor faltante.