Nota: La versión actualizada de este documento se encuentra en este enlace.
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.
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)
| 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.
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.
Archivos CSV:
Desde un csv, utilizamos el comando read.csv:
setwd("C:/")
datos3 <- read.csv("datos_cancer_mamas.csv")
head(datos3)
| 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?
Archivos TXT:
Desde un txt, utilizamos el comando read.table:
datos4 <- read.table("datos_edadesposos.txt",
sep="",header=TRUE)
head(datos4)
| 36 |
30 |
Lima |
| 32 |
33 |
Lima |
| 38 |
36 |
Lima |
| 39 |
40 |
Lima |
| 33 |
29 |
Lima |
| 31 |
32 |
Lima |
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.
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)
| 36 |
30 |
Lima |
| 32 |
33 |
Lima |
| 38 |
36 |
Lima |
| 39 |
40 |
Lima |
| 33 |
29 |
Lima |
| 31 |
32 |
Lima |
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.
| 36 |
30 |
Lima |
| 32 |
33 |
Lima |
| 38 |
36 |
Lima |
| 39 |
40 |
Lima |
| 33 |
29 |
Lima |
| 31 |
32 |
Lima |
head(datos, 10) #Las 10 primeras
| 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)
| 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
| 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 |
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
Selección de filas:
Segun el número de fila:
DataFiltro2 <- datos[1,] #Filtra la primera fila
head(DataFiltro2)
DataFiltro3 <- datos[1:3,] #Filtra ls 3 primeras filas
head(DataFiltro3)
| 36 |
30 |
Lima |
| 32 |
33 |
Lima |
| 38 |
36 |
Lima |
DataFiltro4 <- datos[c(1:3),] #Otra opcion para filtrar las 3 primeras filas
head(DataFiltro4)
| 36 |
30 |
Lima |
| 32 |
33 |
Lima |
| 38 |
36 |
Lima |
DataFiltro5 <- datos[c(50,55,60),] #Filtra las filas 50, 55 y 60
head(DataFiltro5)
| 50 |
41 |
39 |
Lima |
| 55 |
46 |
36 |
Lima |
| 60 |
36 |
30 |
Lima |
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)
| 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)
| 122 |
41 |
42 |
Provincia |
| 123 |
45 |
39 |
Provincia |
| 124 |
39 |
35 |
Provincia |
| 125 |
40 |
36 |
Provincia |
| 126 |
29 |
33 |
Provincia |
| 127 |
49 |
37 |
Provincia |
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)
| 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)
| 1 |
36 |
30 |
Lima |
| 5 |
33 |
29 |
Lima |
| 14 |
28 |
29 |
Lima |
| 15 |
27 |
32 |
Lima |
| 25 |
33 |
26 |
Lima |
| 26 |
30 |
26 |
Lima |
Filtro con variables categóricas
DataFiltro10 <- datos[datos$localidad=="Lima",]
head(DataFiltro10)
| 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)
| 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)
| 122 |
41 |
42 |
Provincia |
| 123 |
45 |
39 |
Provincia |
| 124 |
39 |
35 |
Provincia |
| 125 |
40 |
36 |
Provincia |
| 126 |
29 |
33 |
Provincia |
| 127 |
49 |
37 |
Provincia |
Operaciones con columnas
Se puede realizar diversas operaciones con las columnas y guardarlas en nuevas columnas:
datos$suma <- datos$esposo+datos$esposa
head(datos)
| 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)
| 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)
| 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)
| 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 |
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)
Ejercicio
- Crear un nuevo script.
- Copiar el siguiente código a su script y seguir las instrucciones.
- 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"