Para la mayoría de los análisis, el primer paso consiste en importar un conjunto de datos a R. La función read.table() es una de las principales formas de hacerlo. El archivo de ayuda contiene detalles sobre cómo utilizar esta función. Podemos usar la función write.table() para exportar datos.
Antes de intentar cargar un conjunto de datos, debemos asegurarnos de que R sepa buscar los datos en el directorio apropiado. Utilizando RStudio lo más sencillo es ir al menu Session y establecer el directorio de trabajo con la opción Set Working Directory. Después de haber hecho eso cargaremos el conjunto de datos de Auto. Estos datos son parte de la librería ISLR pero para ilustrar la función read.table() los cargamos ahora desde un archivo de texto. El siguiente comando cargará el archivo Auto.data en R y lo almacenará como un objeto llamado Auto, en un formato llamado data frame.
Auto<-read.table("Auto.data.txt")
head(Auto)
## V1 V2 V3 V4 V5 V6 V7 V8
## 1 mpg cylinders displacement horsepower weight acceleration year origin
## 2 18.0 8 307.0 130.0 3504. 12.0 70 1
## 3 15.0 8 350.0 165.0 3693. 11.5 70 1
## 4 18.0 8 318.0 150.0 3436. 11.0 70 1
## 5 16.0 8 304.0 150.0 3433. 12.0 70 1
## 6 17.0 8 302.0 140.0 3449. 10.5 70 1
## V9
## 1 name
## 2 chevrolet chevelle malibu
## 3 buick skylark 320
## 4 plymouth satellite
## 5 amc rebel sst
## 6 ford torino
Tenga en cuenta que Auto.data es simplemente un archivo de texto, que puede abrir en su computadora usando un editor de texto estándar. A menudo es una buena idea ver un conjunto de datos utilizando un editor de texto u otro software como Excel antes de cargarlo en R.
Este conjunto de datos en particular no se ha cargado correctamente, porque R ha asumido que los nombres de las variables forman parte de los datos y por lo tanto los ha incluido en la primera fila. El conjunto de datos también incluye una serie de observaciones que faltan, indicadas por un signo de interrogación ?. Los valores faltantes son comunes en los conjuntos de datos reales. El uso de la opción header=T (o header=TRUE) en la función read.table() le dice a R que la primera línea del archivo contiene los nombres de las variables, y el uso de la opción na.strings le dice a R que cada vez que vea un determinado carácter o conjunto de caracteres (en este caso, un signo de interrogación), debe tratarse como un elemento faltante de la matriz de datos.
Auto<-read.table ("Auto.data.txt", header =T,na.strings ="?")
head(Auto)
## mpg cylinders displacement horsepower weight acceleration year origin
## 1 18 8 307 130 3504 12.0 70 1
## 2 15 8 350 165 3693 11.5 70 1
## 3 18 8 318 150 3436 11.0 70 1
## 4 16 8 304 150 3433 12.0 70 1
## 5 17 8 302 140 3449 10.5 70 1
## 6 15 8 429 198 4341 10.0 70 1
## name
## 1 chevrolet chevelle malibu
## 2 buick skylark 320
## 3 plymouth satellite
## 4 amc rebel sst
## 5 ford torino
## 6 ford galaxie 500
dim(Auto)
## [1] 397 9
Es más común encontrar la información en archivos csv (valor separado por comas), para cargar este tipo de archivos se puede utilizar la función read.csv().
Auto<-read.csv("Auto.csv", header =T,na.strings ="?")
head(Auto)
## mpg cylinders displacement horsepower weight acceleration year origin
## 1 18 8 307 130 3504 12.0 70 1
## 2 15 8 350 165 3693 11.5 70 1
## 3 18 8 318 150 3436 11.0 70 1
## 4 16 8 304 150 3433 12.0 70 1
## 5 17 8 302 140 3449 10.5 70 1
## 6 15 8 429 198 4341 10.0 70 1
## name
## 1 chevrolet chevelle malibu
## 2 buick skylark 320
## 3 plymouth satellite
## 4 amc rebel sst
## 5 ford torino
## 6 ford galaxie 500
dim(Auto)
## [1] 397 9
La función dim() nos dice que los datos tienen 392 observaciones, o filas, y nueve variables, o columnas. Hay varias maneras de tratar los datos que faltan. En este caso, sólo cinco de las filas contienen observaciones faltantes, y por lo tanto elegimos usar la función na.omit() para simplemente eliminar estas filas.
Auto<-na.omit(Auto)
dim(Auto)
## [1] 392 9
Una vez que los datos se cargan correctamente, podemos usar names() para comprobar los nombres de las variables.
names(Auto)
## [1] "mpg" "cylinders" "displacement" "horsepower" "weight"
## [6] "acceleration" "year" "origin" "name"
Una librería (package) es una colección de funciones, datos y código R que se almacenan en una carpeta conforme a una estructura bien definida, fácilmente accesible para R.
Cuando instalamos R se incorporan por defecto numerosos paquetes. Podemos ver una lista de los paquetes que actualmente tenemos instalados en nuestro ordenador ejecutando:
library()
O directamente en RStudio en la parte derecha del panel en la pestaña Packages.
Es importante distinguir entre tener un paquete instalado en el ordenador y tenerlo cargado en memoria:
Tenerlo instalado en el ordenador significa simplemente que en algún momento lo hemos bajado de internet y lo hemos copiado en algún directorio en que R lo puede localizar.
Tenerlo cargado en memoria significa que durante nuestra sesión de trabajo R ha leído el contenido del paquete y ha incorporado las funciones que contiene a su espacio de trabajo, de tal forma que tales funciones pueden ya ser invocadas y ejecutadas.
El listado de paquetes que presenta Rstudio, hay algunos que están marcados y otros que no. Sólo los paquetes marcados están actualmente cargados en memoria. El resto está simplemente guardado en algún directorio, sin que sus funciones estén aún disponibles para ser ejecutadas desde R.
Observa que pasa cuando marcas uno de las librerías en la pestaña de Packages, de inmediato en la consola se ejecuta el comando library() para la librería seleccionada. También se puede llamar a la librería escribiendo directamente:
#library(nombre_del_paquete)
Supongamos que queremos añadir un paquete a nuestra instalación de R. Podemos hacerlo directamente desde la consola mediante:
#install.packages("nombre_del_paquete")
Aquí un ejemplo rápido y sencillo de lo que puede hacer una librería. Supongamos que somos analistas para una consultora especializada en vehículos y nuestra base de datos para la toma de decisión es la que denominamos Auto. El problema de decisión que se nos presenta es conocer de que otras variables depende la aceleración del vehículos. Sin hacer limpieza de datos (lo cual no es nada correcto), rápidamente podríamos tener una primera vistosa aproximación al entendimiento de la variable si creamos un árbol de regresión utilizando la función tree de la librería tree en el que la respuesta que queremos predecir es la aceleración y utilizar los demás datos como predictores (exceptuando el nombre).
#install.packages(tree)
library(tree)
arbol.aceleracion<-tree(acceleration~.-name, data=Auto)
plot(arbol.aceleracion)
text(arbol.aceleracion, pretty=0, cex=0.5)
Trabajaremos con la Encuesta Nacional de Ocupación y Empleo (ENOE), población de 15 años y más de edad, específicamente con la información del II Trimestre del 2022. Las actividades a realizar son las siguientes:
Descarga la información correspondiente al II Trimestre de la ENOE https://www.inegi.org.mx/programas/enoe/15ymas/#Datos_abiertos
En la carpeta descargada localiza el archivo csv correspondiente a Hogares, su nombre es conjunto_de_datos_hog_enoen_2022_2t.csv y cárgalo en R.
Con ayuda del diccionario de datos, cuyo nombre es diccionario_datos_hog_enoen_2022_2t.csv, y utilizando lo que aprendiste en el apartado Matrices e Indexación de datos, crea un nuevo data frame que se llame ENOE_Hogares_Seleccion y que contenga todas las observaciones (es decir todas las filas) pero sólo las siguientes columnas: Número de municipio según entidad, Número de ageb del marco nacional, Entidad, Pregunta 4 ¿En este hogar se contrata a trabajadores domésticos…, Pregunta 4 ¿Cuántos?, Urbano/Rural
Una función es un conjunto de instrucciones organizadas para realizar una tarea específica. R tiene un gran número de funciones incorporadas y el usuario puede crear sus propias funciones.
En R, una función es un objeto, por lo que el intérprete de R es capaz de pasar el control a la función, junto con los argumentos que puedan ser necesarios para que la función realice las acciones.
La función, a su vez, realiza su tarea y devuelve el control al intérprete, así como cualquier resultado que pueda ser almacenado en otros objetos.
Una función R se crea utilizando la palabra clave function. La sintaxis básica de la definición de una función en R es la siguiente
nombre_de_la_funcion <- function(arg_1, arg_2, ...) {
#Cuerpo de la función
}
Las diferentes partes de una función son:
Nombre de la función - Es el nombre real de la función. Se almacena en el entorno de R como un objeto con este nombre.
Argumentos - Un argumento es un marcador de posición. Cuando se invoca una función, se le pasa un valor al argumento. Los argumentos son opcionales; es decir, una función puede no contener argumentos. También los argumentos pueden tener valores por defecto.
Cuerpo de la función - El cuerpo de la función contiene una colección de declaraciones que definen lo que hace la función.
Valor de retorno - El valor de retorno de una función es la última expresión del cuerpo de la función que se evalúa.
R tiene muchas funciones incorporadas que se pueden llamar directamente en el programa sin definirlas primero. También podemos crear y utilizar nuestras propias funciones denominadas funciones definidas por el usuario.
Ejemplos sencillos de funciones incorporadas son seq(), mean(), max(), sum() y paste(…) etc. Son llamadas directamente por los programas escritos por el usuario.
# Crear una secuencia de números del 32 al 44.
seq(32,44)
## [1] 32 33 34 35 36 37 38 39 40 41 42 43 44
# Encuentra la media de los números del 25 al 82.
mean(25:82)
## [1] 53.5
# Hallar la suma de los números del 41 al 68.
sum(41:68)
## [1] 1526
Podemos crear funciones definidas por el usuario en R. Son específicas para lo que un usuario quiere y una vez creadas pueden ser utilizadas como las funciones incorporadas. A continuación se muestra un ejemplo de cómo se crea y utiliza una función.
# Crear una función para imprimir cuadrados de números en secuencia.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
b
}
}
# Llama a la función new.function suministrando 6 como argumento.
new.function(6)
#¿Porque no hace nada?, ¿qué nos está?
# Crear una función sin argumento.
new.function <- function() {
for(i in 1:5) {
print(i^2)
}
}
# Llamar a la función sin suministrar un argumento.
new.function()
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
Los argumentos de una llamada a una función pueden suministrarse en la misma secuencia definida en la función o pueden suministrarse en una secuencia diferente pero asignada a los nombres de los argumentos.
# Crear una función con argumentos.
new.function <- function(a,b,c) {
result <- a * b + c
print(result)
}
# Llamar a la función por posición de los argumentos.
new.function(5,3,11)
## [1] 26
# Llamar a la función por los nombres de los argumentos.
new.function(a = 11, b = 5, c = 3)
## [1] 58
Podemos definir el valor de los argumentos en la definición de la función y llamar a la función sin suministrar ningún argumento para obtener el resultado por defecto. Pero también podemos llamar a estas funciones suministrando nuevos valores de los argumentos y obtener un resultado no predeterminado.
# Crear una función con argumentos.
new.function <- function(a = 3, b = 6) {
result <- a * b
print(result)
}
# Llama a la función sin dar ningún argumento.
new.function()
## [1] 18
# Llamar a la función dando nuevos valores del argumento.
new.function(9,5)
## [1] 45
Las actividades a realizar son las siguientes:
Construir una función que reciba dos números y que entregue la suma de estos números.
Construya una función que reciba dos números existentes y que entregue el punto medio de estos números. El resultado debe ser un mensaje en pantalla de la forma: “El punto medio de los valores a y b ingresados es __“. Pista: La función cat sirve para concatenar objetos y presentarlos en pantalla.