# Gestión de datos con R

Francisco García García (2014-12-16)

### 0. Introducción

### 1. Ordenación

### 2. Filtrado

### 3. Recodificación de variables

### 4. Transformación de variables

### 5. Categorizar una variable cuantitativa en una cualitativa

### 6. Ejercicios

### 7. Enlaces de interés

## 0. Introducción

R nos permite realizar operaciones de gestión de datos como son la ordenación, la selección o exclusión de grupos de registros o variables, recodificación de variables, transformación de variables, categorización de variables cuantitativas en categóricas….

A continuación se detalla cada una de estas acciones.

## 1. Ordenación

Comenzamos leyendo la base de datos riesgos sobre la que realizaremos diversas gestiones de manejo de datos:

    datos <- read.csv("datos/riesgos.csv", header = T, sep = "\t")

    #> Warning in file(file, "rt"): cannot open file 'datos/riesgos.csv': No such
    #> file or directory

    #> Error in file(file, "rt"): cannot open the connection

Echamos un vistazo a la estructura de los datos:

    str(datos)

    #> Error in str(datos): object 'datos' not found

    head(datos)

    #> Error in head(datos): object 'datos' not found

    tail(datos)

    #> Error in tail(datos): object 'datos' not found

Con la función attach hacemos accesible la base de datos seleccionada:

    attach(datos)

    #> Error in attach(datos): object 'datos' not found

Ordenamos los datos por la variable edad y guardamos esta nueva información en datos2:

    datos2 <- datos[order(edad), ]

    #> Error in eval(expr, envir, enclos): object 'datos' not found

    head(datos2)

    #> Error in head(datos2): object 'datos2' not found

Ordenamos los datos por la variable edad en sentido decreciente y guardamos esta nueva información en datos2:

    datos2 <- datos[order(-edad), ]

    #> Error in eval(expr, envir, enclos): object 'datos' not found

    head(datos2)

    #> Error in head(datos2): object 'datos2' not found

Ordenamos los datos: primero por la variable edad en sentido decreciente y en segundo lugar por la variable peso en sentido creciente y guardamos esta nueva información en datos2:

    datos2 <- datos[order(-edad, peso), ]

    #> Error in eval(expr, envir, enclos): object 'datos' not found

    head(datos2)

    #> Error in head(datos2): object 'datos2' not found

## 2. Filtrado

En ocasiones necesitamos seleccionar un determinado grupo de variables o un determinado grupo de registros. O ambas cosas a la vez. ¿Cómo realizamos este filtrado desde R? Vemos algunos ejemplos con la base de datos riesgos.csv:

    head(datos)

    #> Error in head(datos): object 'datos' not found

Seleccionamos las variables id, contrato y carfisi (son columnas en la base de datos). Guardamos la nueva información en datos2:

    datos2 <- datos[, c("id", "contrato", "carfisi")]

    #> Error in eval(expr, envir, enclos): object 'datos' not found

    head(datos2)

    #> Error in head(datos2): object 'datos2' not found

Ahora seleccionamos los 3 primeros registros de la base riesgos y los guardaremos en datos2:

    datos2 <- datos[1:3, ]

    #> Error in eval(expr, envir, enclos): object 'datos' not found

    head(datos2)

    #> Error in head(datos2): object 'datos2' not found

También podemos seleccionar registros (filas en la base de datos) que verifiquen algún criterio de selección. Por ejemplo, estamos interesamos en realizar una subselección de la base de datos riesgos que incluya sólo personas con jornada completa:

    datos2 <- datos[jornada=="completa",  ]

    #> Error in eval(expr, envir, enclos): object 'datos' not found

    head(datos2)

    #> Error in head(datos2): object 'datos2' not found

    table(datos2$jornada)

    #> Error in table(datos2$jornada): object 'datos2' not found

Por último queremos realizar la siguiente subselección: sólo nos quedaremos con las variables id, contrato y carfisi (columnas). Al mismo tiempo, seleccionaremos los registros con jornada completa (filas):

    datos2 <- datos[jornada=="completa", c("id", "contrato", "carfisi")]

    #> Error in eval(expr, envir, enclos): object 'datos' not found

    head(datos2)

    #> Error in head(datos2): object 'datos2' not found

## 3. Recodificación de variables

Hay varias situaciones en las que nos interesará la recodificación de las variables:

3.1. Recodificamos los valores de una variable por otros valores en esa misma variable. Ejemplo: queremos cambiar los valores de la talla > 165 por 180:

    talla

    #> Error in eval(expr, envir, enclos): object 'talla' not found

    talla[talla > 165] <- 200

    #> Error in talla[talla > 165] <- 200: object 'talla' not found

    talla

    #> Error in eval(expr, envir, enclos): object 'talla' not found

3.2. O bien realizamos una recodificación de valores pero en otra variable distinta de la inicial:

    peso2 <- peso

    #> Error in eval(expr, envir, enclos): object 'peso' not found

    peso2[peso > 75] <- 99

    #> Error in peso2[peso > 75] <- 99: object 'peso2' not found

    peso

    #> Error in eval(expr, envir, enclos): object 'peso' not found

    peso2

    #> Error in eval(expr, envir, enclos): object 'peso2' not found

## 4. Transformación de variables

¿Cómo podemos incorporar nuevas variables en nuestra base de datos? Veamos algunos ejemplos:

Queremos crear una variable en la base de datos riesgos.csv que se llame índice de masa corporal que se obtiene dividiendo el peso en kg. entre el cuadrado de la altura en metros. Veamos como lo hacemos en R:

    datos[, "IMC"]  <- peso / (talla/100)^2

    #> Error in eval(expr, envir, enclos): object 'peso' not found

    head(datos)

    #> Error in head(datos): object 'datos' not found

## 5. Categorizar una variable cuantitativa en una cualitativa

Esta opción suele ser muy habitual. Disponemos de la información detallada para una variable pero en ocasiones nos interesa trabajar con esta variable en su versión categórica.

Por ejemplo, categorizaremos la variable cuantitativa IMC en cuatro grupos:

- bajo peso: IMC <= 18.50
- normal: 18.5 < IMC <=25
- sobrepeso: 25 < IMC <= 30
- obesidad: IMC >30 En realidad buscamos los siguientes tramos de edad: (minimo, 18.5], (18.5, 25], (25, 30], (30, máximo]

    summary(datos[,"IMC"])

    #> Error in summary(datos[, "IMC"]): object 'datos' not found

    datos[,"IMC_grupos"] <- cut(datos$IMC, breaks = c(14,18.5,25,30,34), labels = c("bajo peso", "normal", "sobrepreso", "obesidad"))

    #> Error in cut(datos$IMC, breaks = c(14, 18.5, 25, 30, 34), labels = c("bajo peso", : object 'datos' not found

    head(datos)

    #> Error in head(datos): object 'datos' not found

¿Cuántas personas tenemos en cada uno de las categorías de IMC?

    table(datos[,"IMC_grupos"])

    #> Error in table(datos[, "IMC_grupos"]): object 'datos' not found

## 6. Ejercicios

En la base de datos estres.csv se incluye información sobre los niveles de estrés de un grupo de trabajadores, así como otras variables de interés.

Realiza las siguientes actividades en R:

- A. Lee la base de datos estres, examina la estructura de los datos (str) y utiliza la función attach para hacerla accesible y trabajar más cómodamente con sus variables. ¿Qué variables son factor? ¿Y qué variables son integer?
- B. ¿Qué ID tiene la persona con mejor salario? Una opción podría ser la ordenación de la base de datos por la variable salario en sentido decreciente.
- C. Realiza una subselección en datos que guardaremos en datos2, con los trabajadores que tengan un nivel de estrés mayor de 5.
- D. También nos gustaría seleccionar los trabajadores que presenten simultáneamente carga física > 3, carga psíquica > 4 y ruido > 4. Salvaremos la subselección en datos3.
- E. Nos hemos equivocado en la introducción de datos y para todos los valores 2 de carga física, queríamos haber puesto un 3. Recodifica esta variable en ella misma incluyendo este cambio.
- F. Crea una nueva variable llamada expo_total que se obtenga como suma de los valores de exposición en carga física, carga psíquica y ruido.
- G. Categoriza la variable estres en otra nueva variable que llamaremos estres_grupo que incluya tres categorías: bajo: 1 a 2; medio: 3 a 7; alto; 8 a 10. ¿Cuántas personas hay en cada categoría de la nueva variable.

## 7. Enlaces de interés

- Quick-R Web con recursos para trabajar con R.

- r-tutor An R Introduction to Statistics.