Lectura de datos

Incorporación de datos desde archivos externos.
install.packages
library
readxl
read_excel
head
names
attach
detach
read.table
tapply
summary
Author

Román Salmerón Gómez

Published

November 4, 2022

Hasta ahora se ha trabajado con conjuntos de datos de dimensiones pequeñas, si se tuviese que trabajar con 500 observaciones para 20 variables, ¿trabajaríamos igual? Seguro que no y por varias razones. La principal, seguro que nos equivocamos al introducir los datos a mano.

En estos casos se suele tener la información en archivos externos en formato de hoja de cálculo o texto plano. Veremos cómo incorporar esta información a R.

Desde una hoja de excel

Mediante el paquete readxl:

# install.packages("readxl") # sólo es necesario instalarlo una vez
library(readxl) # una vez instalado, hay que cargarlo (siempre que se quiera usar en una nueva sesión)

datos = read_excel("RLaTeX.xls", sheet = 1, col_names = TRUE, col_types = c("numeric","text","text","numeric","text","numeric"))
  # como la hoja de datos está en el mismo directorio de trabajo del archivo con el que estamos trabajando, sólo hay que especificar su nombre
  #   si no fuese así, habría que especificar la ruta relativa o absoluta (por ejemplo, dirección web) que lleve a la ubicación del archivo
  # con 'sheet' indicamos la hoja del libro de excel de la que queremos leer los datos
  # con 'col_names' indicamos si en la primera línea están el nombre de las variables
  # con 'col_types' indicamos el tipo de variable que es: numérica o de caracteres 
  # ¡¡¡¡asegurarse de que el delimitar decimal usado es el punto!!!!!
head(datos) # muestra el nombre de las variables y las primeras observaciones
# A tibble: 6 × 6
  Orden Nombre   Apellidos  Nota Genero  Edad
  <dbl> <chr>    <chr>     <dbl> <chr>  <dbl>
1     1 Ainara   Riquelme   3.81 Mujer     27
2     2 Claudia  Menchén    4.66 Mujer     24
3     3 Michael  García     6.19 Hombre    25
4     4 Luis     Miragaya   6.74 Hombre    25
5     5 Mario    Segovia    4.75 Hombre    23
6     6 Catalina Escobar    5.86 Mujer     26
names(datos) # muestra el nombre de las variables
[1] "Orden"     "Nombre"    "Apellidos" "Nota"      "Genero"    "Edad"     

Si bien con la instalación básica de R se pueden realizar numerosos análisis, no deja de ser una instalación básica, por lo que en ciertas ocasiones (como esta) es necesario instalar paquetes (disponibles en CRAN https://cran.r-project.org/) que permitan usar una serie de comandos extras. Estos paquetes se instalan mediante el comando install.packages.

¡Cuidado con el delimitador decimal definido en la hoja de cálculo! Recordemos que en R es el punto. Si no coincide, tendremos problemas para incorporar los datos.

A partir de entonces funciona como una matriz:

datos[1,] # primera fila de 'datos'
# A tibble: 1 × 6
  Orden Nombre Apellidos  Nota Genero  Edad
  <dbl> <chr>  <chr>     <dbl> <chr>  <dbl>
1     1 Ainara Riquelme   3.81 Mujer     27
datos[,1] # primera columna de 'datos'
# A tibble: 20 × 1
   Orden
   <dbl>
 1     1
 2     2
 3     3
 4     4
 5     5
 6     6
 7     7
 8     8
 9     9
10    10
11    11
12    12
13    13
14    14
15    15
16    16
17    17
18    18
19    19
20    20

Para poder usar el nombre de las variables usamos el comando attach:

attach(datos)
  Orden # reconoce el nombre de las variables  
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
  sum(Orden)
[1] 210
  prod(Orden[Orden<10]) # uso interesante de los operadores lógicos: ¿qué hace?
[1] 362880
  summary(Orden)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    5.75   10.50   10.50   15.25   20.00 
detach(datos)  

¿Qué hará detach?

Aquí tienes el archivo RLaTeX.xls.

Desde un archivo de texto

Mediante el comando read.table:

otros.datos = read.table("RLaTeX.csv", header=T, sep=";")
  # mismas apreciaciones de antes sobre el nombre del archivo
  # con 'header' indicamos si en la primera línea están el nombre de las variables
  # con 'sep' indicamos cómo se separan las columnas (variables) del archivo
  # ¡¡¡¡asegurarse de que el delimitar decimal usado es el punto!!!!!
head(otros.datos)
  Orden   Nombre Apellidos Nota Genero Edad
1     1   Ainara  Riquelme 3.81  Mujer   27
2     2  Claudia   Menchen 4.66  Mujer   24
3     3 Michael     Garcia 6.19 Hombre   25
4     4     Luis  Miragaya 6.74 Hombre   25
5     5    Mario   Segovia 4.75 Hombre   23
6     6 Catalina   Escobar 5.86  Mujer   26

Este comando es más estable que el anterior, por lo que en muchas ocasiones es aconsejable guardar los datos de la hoja excel como CSV (delimitado por comas)(*.csv). Otras opciones interesantes son los comandos scan o data.frame.

Jugueteamos con los datos:

attach(otros.datos)
  Nota[Genero=="Mujer"] # notas de sólo las mujeres
 [1] 3.81 4.66 5.86 6.51 6.14 6.15 7.45 3.88 6.47 4.60
  Nota[Genero=="Hombre"] # notas de sólo los hombres
 [1] 6.19 6.74 4.75 6.18 4.49 6.73 7.30 4.92 6.48 5.19
  tapply(Nota, Genero, summary) # calcula un resumen ('summary') de la variable 'Nota' distinguiendo por el 'Genero'
$Hombre
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.490   4.987   6.185   5.897   6.668   7.300 

$Mujer
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  3.810   4.615   6.000   5.553   6.390   7.450 
  Nota[Apellidos=="Garcia"]
[1] 6.19 6.15 7.30
  Nota[Edad>median(Edad)] # notas de las personas con edad superior a la edad mediana
[1] 3.81 5.86 6.14 6.73 7.45 6.48 5.19
      # es decir, nota del 50% de las personas con mayor edad
  mean(Edad[Genero=="Mujer"]) # edad media de las mujeres
[1] 24.9
  tapply(Edad, Genero, mean)
Hombre  Mujer 
  25.2   24.9 
detach(otros.datos) 

Aquí tienes el archivo RLaTeX.csv.