Nota: La versión actualizada de este documento se encuentra en este enlace.

1 Lectura de datos

Los datos pueden estar en diferentes formatos; por ello, en esta sección aprenderemos cómo utilizar R para acceder a los datos desde diferentes tipos de achivos: csv, txt, y xlsx.

1.1 Abrir XLSX:

Es posible abrir archivos xlsx si utilizamos el paquete readxl. Para instalar este paquete usamos install.packages como en la siguiente línea:

install.packages("readxl")   

Luego, para verificar si hemos instalado correctamente, utilizamos library(readxl) y observamos el resultado.

library(readxl)    

Si podemos observar que se ejecuto sin errores, estamos listos para importar archivos desde excel.

Podemos cargar ejecutar el comando read_excel de la librería readxl para abrir el archivo xlsx.

# Primero, definimos el directorio de trabajo.
setwd("C:/")  
# Cargamos los datos.
datos1 <- readxl::read_excel("databmi.xlsx") 
# Explorar 6 primeras filas
head(datos1)
bmi bmi.papa bmi.mama edad.papa edad.mama edad
24.9 27.4 29.5 45.6 44.2 22.7
29.8 38.5 33.6 60.7 55.1 24.7
25.6 29.7 28.8 62.3 61.7 37.6
27.3 29.7 28.8 62.3 61.7 24.3
26.6 29.7 28.8 62.3 61.7 37.6
26.7 34.9 31.0 50.9 46.5 23.7

Observar la creación del dataset datos1 en la ventana “Environment”. Puede explorar el dataset dando click al objeto.

1.2 Forma interactiva:

En lugar de la ruta del archivo podemos escribir “file.choose()” para que nos aparezca un cuadro de dialogo en donde debemos elegir el archivo que queremos utilizar.

datos2 <- readxl::read_excel(file.choose())

Seleccione el archivo y verifique que se ha creado el objeto datos2 en la ventana environment.

1.3 Archivos CSV:

Desde un csv, utilizamos el comando read.csv:

setwd("C:/")
datos3 <- read.csv("datos_cancer_mamas.csv")
head(datos3)
tipo_de_evento age menopause tumor_size inv_nodes node_caps deg_malig breast breast_quad irradiat
no-recurrence-events 30-39 premeno 30-34 0-2 no 3 left left_low no
no-recurrence-events 40-49 premeno 20-24 0-2 no 2 right right_up no
no-recurrence-events 40-49 premeno 20-24 0-2 no 2 left left_low no
no-recurrence-events 60-69 ge40 15-19 0-2 no 2 right left_up no
no-recurrence-events 40-49 premeno 0-4 0-2 no 2 right right_low no
no-recurrence-events 60-69 ge40 15-19 0-2 no 2 left left_low no

Verifique la creación del objeto datos3. ¿Cuántas observaciones tienen este dataset? ¿Y cuantas columnas tiene?

1.4 Archivos TXT:

Desde un txt, utilizamos el comando read.table:

datos4 <- read.table("datos_edadesposos.txt",
                    sep="",header=TRUE)
head(datos4)
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
39 40 Lima
33 29 Lima
31 32 Lima

1.5 Abrir enlaces:

Base de datos: Datos de pacientes. Estos datos se encuentran en la página de susalud y son abierto al público. Acedemos a ellos con el enlace al archivo spss.

2 Manejo de datos

Para esta sección, utilizamos los datos de las edades de esposos desde el dataset datos_edadesposos con el siguiente comando:

datos <- read.table("datos_edadesposos.txt",
                    sep="",header=TRUE)
head(datos)
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
39 40 Lima
33 29 Lima
31 32 Lima

2.1 Comandos útiles:

Obtener la dimensión del dataframe utilizando la función dim

dim(datos)
## [1] 170   3

Ver la estructura de los datos (variables y tipos de variables en R) usando str

str(datos)
## 'data.frame':    170 obs. of  3 variables:
##  $ esposo   : int  36 32 38 39 33 31 39 52 37 38 ...
##  $ esposa   : int  30 33 36 40 29 32 38 44 37 35 ...
##  $ localidad: chr  "Lima" "Lima" "Lima" "Lima" ...

Las r primeras observaciones son observadas usando head

head(datos) # Por defecto se muestran 6 filas.
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
39 40 Lima
33 29 Lima
31 32 Lima
head(datos, 10) #Las 10 primeras
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
39 40 Lima
33 29 Lima
31 32 Lima
39 38 Lima
52 44 Lima
37 37 Lima
38 35 Lima

Las r ultimas observaciones las vemos utilizando tail

tail(datos)
esposo esposa localidad
165 41 36 Provincia
166 36 37 Provincia
167 33 30 Provincia
168 31 35 Provincia
169 29 28 Provincia
170 39 33 Provincia
tail(datos, 10) #Las 10 ultimas
esposo esposa localidad
161 43 41 Provincia
162 35 38 Provincia
163 37 35 Provincia
164 39 39 Provincia
165 41 36 Provincia
166 36 37 Provincia
167 33 30 Provincia
168 31 35 Provincia
169 29 28 Provincia
170 39 33 Provincia

2.2 Selección de columna:

Para seleccionar una columna, tenemos las siguientes opciones:

edades_esposo <- datos$esposo
edades_esposo
##   [1] 36 32 38 39 33 31 39 52 37 38 40 38 35 28 27 38 36 46 39 39 34 41 43 31 33
##  [26] 30 38 48 36 41 37 42 26 43 29 28 40 35 36 38 39 29 49 43 37 45 20 34 33 41
##  [51] 42 37 35 38 46 33 34 36 52 36 47 35 33 35 29 43 36 49 41 36 30 33 37 27 37
##  [76] 39 34 39 29 36 41 42 34 33 39 33 46 34 41 43 36 37 30 37 36 22 35 36 33 37
## [101] 32 32 49 34 38 37 37 35 34 36 48 37 30 48 42 46 42 40 37 38 37 41 45 39 40
## [126] 29 49 50 30 41 33 45 30 39 46 42 35 44 25 33 36 32 36 34 47 36 38 32 46 23
## [151] 34 32 35 48 33 25 42 36 27 35 43 35 37 39 41 36 33 31 29 39
edades_esposo <- datos[,1]
edades_esposo
##   [1] 36 32 38 39 33 31 39 52 37 38 40 38 35 28 27 38 36 46 39 39 34 41 43 31 33
##  [26] 30 38 48 36 41 37 42 26 43 29 28 40 35 36 38 39 29 49 43 37 45 20 34 33 41
##  [51] 42 37 35 38 46 33 34 36 52 36 47 35 33 35 29 43 36 49 41 36 30 33 37 27 37
##  [76] 39 34 39 29 36 41 42 34 33 39 33 46 34 41 43 36 37 30 37 36 22 35 36 33 37
## [101] 32 32 49 34 38 37 37 35 34 36 48 37 30 48 42 46 42 40 37 38 37 41 45 39 40
## [126] 29 49 50 30 41 33 45 30 39 46 42 35 44 25 33 36 32 36 34 47 36 38 32 46 23
## [151] 34 32 35 48 33 25 42 36 27 35 43 35 37 39 41 36 33 31 29 39
edades_esposo <- datos[, c("esposo")]
edades_esposo
##   [1] 36 32 38 39 33 31 39 52 37 38 40 38 35 28 27 38 36 46 39 39 34 41 43 31 33
##  [26] 30 38 48 36 41 37 42 26 43 29 28 40 35 36 38 39 29 49 43 37 45 20 34 33 41
##  [51] 42 37 35 38 46 33 34 36 52 36 47 35 33 35 29 43 36 49 41 36 30 33 37 27 37
##  [76] 39 34 39 29 36 41 42 34 33 39 33 46 34 41 43 36 37 30 37 36 22 35 36 33 37
## [101] 32 32 49 34 38 37 37 35 34 36 48 37 30 48 42 46 42 40 37 38 37 41 45 39 40
## [126] 29 49 50 30 41 33 45 30 39 46 42 35 44 25 33 36 32 36 34 47 36 38 32 46 23
## [151] 34 32 35 48 33 25 42 36 27 35 43 35 37 39 41 36 33 31 29 39

2.3 Selección de filas:

2.3.1 Segun el número de fila:

DataFiltro2 <- datos[1,]  #Filtra la primera fila
head(DataFiltro2)
esposo esposa localidad
36 30 Lima
DataFiltro3 <- datos[1:3,] #Filtra ls 3 primeras filas
head(DataFiltro3)
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
DataFiltro4 <- datos[c(1:3),] #Otra opcion para filtrar las 3 primeras filas
head(DataFiltro4)
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
DataFiltro5 <- datos[c(50,55,60),]  #Filtra las filas 50, 55 y 60
head(DataFiltro5)
esposo esposa localidad
50 41 39 Lima
55 46 36 Lima
60 36 30 Lima

2.3.2 Segun una condición

Según una condición sobre alguna de las columnas.

DataFiltro6 <- datos[datos$esposo>=40,]  # Seleccionando edad del esposo mayor a 40.
head(DataFiltro6)
esposo esposa localidad
8 52 44 Lima
11 40 37 Lima
18 46 37 Lima
22 41 39 Lima
23 43 33 Lima
28 48 42 Lima
DataFiltro7 <- datos[datos$localidad=="Provincia",] # Seleccionando los esposos de provincia.
head(DataFiltro7)
esposo esposa localidad
122 41 42 Provincia
123 45 39 Provincia
124 39 35 Provincia
125 40 36 Provincia
126 29 33 Provincia
127 49 37 Provincia

2.3.3 Filtro con operadores lógicos

#  Filtro con operadores logicos ----
DataFiltro8 <- datos[datos$esposo<=40 & datos$esposo<=40,] # & Es el operador logico para "y"
head(DataFiltro8)
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
39 40 Lima
33 29 Lima
31 32 Lima
DataFiltro9 <- datos[datos$esposa<=30 | datos$esposo<=30,] # | Es el operador logico para "o"
head(DataFiltro9)
esposo esposa localidad
1 36 30 Lima
5 33 29 Lima
14 28 29 Lima
15 27 32 Lima
25 33 26 Lima
26 30 26 Lima

2.3.4 Filtro con variables categóricas

DataFiltro10 <- datos[datos$localidad=="Lima",] 
head(DataFiltro10)
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
39 40 Lima
33 29 Lima
31 32 Lima
DataFiltro11 <- datos[datos$localidad%in%"Lima",] #Otra opcion.
head(DataFiltro11)
esposo esposa localidad
36 30 Lima
32 33 Lima
38 36 Lima
39 40 Lima
33 29 Lima
31 32 Lima
DataFiltro12 <- datos[!datos$localidad=="Lima",] # El operador ! indica negacion
head(DataFiltro12)
esposo esposa localidad
122 41 42 Provincia
123 45 39 Provincia
124 39 35 Provincia
125 40 36 Provincia
126 29 33 Provincia
127 49 37 Provincia

2.4 Operaciones con columnas

Se puede realizar diversas operaciones con las columnas y guardarlas en nuevas columnas:

datos$suma <- datos$esposo+datos$esposa
head(datos)
esposo esposa localidad suma
36 30 Lima 66
32 33 Lima 65
38 36 Lima 74
39 40 Lima 79
33 29 Lima 62
31 32 Lima 63
datos$dif <- datos$esposo-datos$esposa
head(datos)
esposo esposa localidad suma dif
36 30 Lima 66 6
32 33 Lima 65 -1
38 36 Lima 74 2
39 40 Lima 79 -1
33 29 Lima 62 4
31 32 Lima 63 -1
#Multiplicación y División
datos$mult <- 2*datos$esposa
head(datos)
esposo esposa localidad suma dif mult
36 30 Lima 66 6 60
32 33 Lima 65 -1 66
38 36 Lima 74 2 72
39 40 Lima 79 -1 80
33 29 Lima 62 4 58
31 32 Lima 63 -1 64
datos$div <- datos$esposo/5
head(datos)
esposo esposa localidad suma dif mult div
36 30 Lima 66 6 60 7.2
32 33 Lima 65 -1 66 6.4
38 36 Lima 74 2 72 7.6
39 40 Lima 79 -1 80 7.8
33 29 Lima 62 4 58 6.6
31 32 Lima 63 -1 64 6.2

3 Guardar un archivo

Utilizamos el comando write.csv para guardar un archivo en formato csv.

# 1. Definir el directorio donde guardar el archivo csv
setwd("C:/Users/EvelynG/Documents/")
write.csv(datos,"datosfiltrados.csv", row.names=FALSE)

4 Ejercicio

  1. Crear un nuevo script.
  2. Copiar el siguiente código a su script y seguir las instrucciones.
  3. Guardarlo como Manejo_datos_cancer_[nombre].R
#::::::::::::::::::::::::::::::::::::::::::::::::::::
# Ejercicio:
# * Guardar el script como "Manejo_datos_cancer_[Nombre].R":
# * Completar este script escribiendo el código debajo de lo que se le piden en los siguientes items:
#::::::::::::::::::::::::::::::::::::::::::::::::::::

# 1. Cargar el archivo  (Ejemplo)
library("readxl")    
setwd("D:/Documentos/") # <- Reemplazar por la dirección de su archivo datos_cancer_mamas.xlsx
datos1 <- read_excel("datos_cancer_mamas.xlsx")
head(datos)

# 2. Obtener la dimensión del dataframe.

# 3. Ver las primeras 6 filas.

# 4. Ver las ultimas 10 filas.

# 5. Seleccionar la columna "age" y guardarla como objeto "edad" .

# 6. Seleccionar las primeras 10 filas y guardarlas en un dataframe llamado filtro1.

# 7. Seleccionar los casos con cáncer en el seno derecho (breast=="right"). 
# Guardar el resultado en un dataframe llamado filtro2.
# Luego, ver cuantas filas y columnas existen en el filtro2.

# 8. Seleccionar los casos con pre-menopausia (menopause=="premeno")

# 9. Seleccionar los casos con cancer en la mama derecha y con pre-menopausia. 
# Guardar el resultado en un dataframe llamado filtro4.
# Luego, ver cuantas filas y columnas existen en el filtro4.

# 10. Crear una nueva columna (deg_malig_v2) con deg_malig multiplicado por 10.

# 11. Guardar los datos en un nuevo archivo llamado "datos_cancer2.csv"