Hasta el momento solamente hemos visto como importar archivos .csv en R, desde un ambiente local.Para esta clase vamos a recorrer como importar en R otro tipo de archivos y además como leerlos directamente desde una página web por ejemplo.
Con la función read.table() se puede fácilmente leer archivos de extensión .txt.En el siguiente ejemplo veremos como leer este tipo de archivo desde una dirección web:
df <- read.table(file = "https://s3.amazonaws.com/assets.datacamp.com/blog_assets/test.txt",
header = FALSE)
df## V1 V2 V3
## 1 1 6 a
## 2 2 7 b
## 3 3 8 c
## 4 4 9 d
## 5 5 10 e
Idealmente, en el argumento file, se debe pasar solamente el nombre y la extensión del archivo, ya que el working directory ya se debería haber configurado previamente.Al usar esta función, por defecto el objeto se convierte en un dataframe.
Si un archivo de texto esta separado por “,” o “;”, usualmente se lee como un archivo de extensión .csv.Para esto se utiliza la función read.csv :
df <- read.csv("https://s3.amazonaws.com/assets.datacamp.com/blog_assets/test.csv",
header = TRUE)
df## Col1 Col2 Col3
## 1 1 2 3
## 2 4 5 6
## 3 7 8 9
## 4 a b c
Si el archivo de texto está separado por otro caracter que no sea tab, “,” o “;”, existe la función read.delim() como variante a read.table()
df <- read.delim("https://s3.amazonaws.com/assets.datacamp.com/blog_assets/test_delim.txt", sep="$")
df## Col1 Col2 Col3
## 1 1 2 3
## 2 4 5 6
## 3 7 8 9
## 4 a b c
Para los ex amantes de excel, R también provee una forma sencilla y flexible de leer datos en este formato.Para esto vamos a utilizar el paquete readxl para facilitar la manipulación:
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
##
## group_rows
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
setwd("/cloud/project/CursoR/Clase4")
exceldf <- read_excel("DGAC_Tipos de Procedimientos 2017-2018.xlsx")## New names:
## * `` -> ...15
## * `` -> ...16
## # A tibble: 6 x 16
## `Año` Institucion Cod `Tipo de proced… `Actualizado al`
## <dbl> <chr> <dbl> <chr> <chr>
## 1 2017 DIRECCION … 3.01e9 LICITACION PUBL… 30/04/2019 06:0…
## 2 2017 DIRECCION … 3.01e9 LICITACION PUBL… 30/04/2019 06:0…
## 3 2017 DIRECCION … 3.01e9 LICITACION PUBL… 30/04/2019 06:0…
## 4 2017 DIRECCION … 3.01e9 LICITACION PUBL… 30/04/2019 06:0…
## 5 2017 DIRECCION … 3.01e9 LICITACION PUBL… 30/04/2019 06:0…
## 6 2017 DIRECCION … 3.01e9 LICITACION PUBL… 30/04/2019 06:0…
## # … with 11 more variables: `No de procedimiento` <chr>, `Objeto
## # contractual` <chr>, `Apertura del concurso` <dttm>, `Adjudicacion mas
## # reciente` <chr>, `Monto adjudicado en colones al año 2017` <chr>,
## # `Monto adjudicado en colones al corte(*)` <chr>, `Monto
## # presupuestado` <chr>, Estado <chr>, `ultima modificación` <dttm>,
## # ...15 <lgl>, ...16 <dbl>
Este paquete a su vez permite realizar algunas otras acciones de manipulación de archivos de excel:
## # A tibble: 150 x 5
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # … with 140 more rows
## [1] "iris" "mtcars" "chickwts" "quakes"
## # A tibble: 71 x 2
## weight feed
## <dbl> <chr>
## 1 179 horsebean
## 2 160 horsebean
## 3 136 horsebean
## 4 227 horsebean
## 5 217 horsebean
## 6 168 horsebean
## 7 108 horsebean
## 8 124 horsebean
## 9 143 horsebean
## 10 140 horsebean
## # … with 61 more rows
## # A tibble: 1,000 x 5
## lat long depth mag stations
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 -20.4 182. 562 4.8 41
## 2 -20.6 181. 650 4.2 15
## 3 -26 184. 42 5.4 43
## 4 -18.0 182. 626 4.1 19
## 5 -20.4 182. 649 4 11
## 6 -19.7 184. 195 4 12
## 7 -11.7 166. 82 4.8 43
## 8 -28.1 182. 194 4.4 15
## 9 -28.7 182. 211 4.7 35
## 10 -17.5 180. 622 4.3 19
## # … with 990 more rows
#Leer datos según el rango en diferentes formatos
read_excel(xls_example,sheet = 1, range = "C1:E4")## # A tibble: 3 x 3
## Petal.Length Petal.Width Species
## <dbl> <dbl> <chr>
## 1 1.4 0.2 setosa
## 2 1.4 0.2 setosa
## 3 1.3 0.2 setosa
## # A tibble: 3 x 5
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## # A tibble: 150 x 3
## Sepal.Width Petal.Length Petal.Width
## <dbl> <dbl> <dbl>
## 1 3.5 1.4 0.2
## 2 3 1.4 0.2
## 3 3.2 1.3 0.2
## 4 3.1 1.5 0.2
## 5 3.6 1.4 0.2
## 6 3.9 1.7 0.4
## 7 3.4 1.4 0.3
## 8 3.4 1.5 0.2
## 9 2.9 1.4 0.2
## 10 3.1 1.5 0.1
## # … with 140 more rows
## # A tibble: 4 x 3
## cyl disp hp
## <dbl> <dbl> <dbl>
## 1 6 160 110
## 2 6 160 110
## 3 4 108 93
## 4 6 258 110
# Si el valor de NA, se encuentra en los datos diferente a espacio vacíos, se pueden configurar valores
# personalizados en la función
read_excel(xls_example, na = "setosa")## # A tibble: 150 x 5
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 <NA>
## 2 4.9 3 1.4 0.2 <NA>
## 3 4.7 3.2 1.3 0.2 <NA>
## 4 4.6 3.1 1.5 0.2 <NA>
## 5 5 3.6 1.4 0.2 <NA>
## 6 5.4 3.9 1.7 0.4 <NA>
## 7 4.6 3.4 1.4 0.3 <NA>
## 8 5 3.4 1.5 0.2 <NA>
## 9 4.4 2.9 1.4 0.2 <NA>
## 10 4.9 3.1 1.5 0.1 <NA>
## # … with 140 more rows
A continuación se brinda una guía para la lectura de otro tipo de archivos:
| Tipo de archivo | Paquete | Descripción |
|---|---|---|
| JSON | rjson |
JsonData <- fromJSON(file= "<filename.json>" ) |
| xml | XML |
xmlfile <- xmlTreeParse("<Your URL to the XML data>") |
| html | RCurl y XML |
urldata <- getURL(url)data <- readHTMLTable(urldata,stringsAsFactors = FALSE) |
| SAS,SPSS,etc | foreign |
mySPSSData <- read.spss("example.sav") |
En el análisis de datos, una herramienta esencial y una habilidad muy favorable es el correcto manejo de datos de texto para el procesamiento y sintesis de los datos.
Para esto, vamos a utilizar como base el paquete stringr que contiene muchas funciones para facilitar el trabajo con string o datos textuales.Es importante mencionar que el R base contiene muchas de las funciones que cumplen objetivos similares a las que se pueden ejecutar con este paquete, pero se hará énfasis en la funciones del paquete para mantener la estandarización.
Además, vamos a utilizar el dataset de registro de tumores de la CCSS:
#install.packages("stringr")
library(stringr)
salud <- read.csv("salud.csv",sep=";")
kable(head(salud,10)) %>%
kable_styling(bootstrap_options = c("striped", "hover"))%>%
scroll_box(width = "900px", height = "500px")| CODIGOCASO | NOMBREESTABLECIMIENTO | SEXO | PROVINCIA | CANTON | DISTRITO | DESC2 | LATERALIDAD | BASEDIAGNOSTICO |
|---|---|---|---|---|---|---|---|---|
| 261659 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | SAN JOSE | SAN JOSE | SAN SEBASTIAN | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | CITOLOGIA O HEMATOLOGIA |
| 262504 | HOSPITAL MONSENOR SANABRIA | FEMENINO | PUNTARENAS | PUNTARENAS | MANZANILLO | TUMOR MALIGNO DE LA UNION RECTOSIGMOIDEA | NO_APLICA | HISTOLOGIA |
| 267637 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | ASERRI | ASERRI | TUMOR MALIGNO DEL GANGLIO LINFATICO, SITIO NO ESPECIFICADO | NO_APLICA | HISTOLOGIA |
| 264715 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | SOLAMENTE CLINICA |
| 265213 | HOSPITAL SAN CARLOS | MASCULINO | ALAJUELA | SAN CARLOS | QUESADA | TUMOR MALIGNO DE PIEL DEL LABIO | NO_APLICA | HISTOLOGIA |
| 262350 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | SAN JOSE | PAVAS | TUMOR MALIGNO DEL ENDOMETRIO | NO_APLICA | HISTOLOGIA |
| 270652 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | FEMENINO | LIMON | GUACIMO | GUACIMO | TUMOR MALIGNO DE LA PIEL DE LA OREJA Y DEL CONDUCTO AUDITIVO EXTERNO | NO_APLICA | SOLAMENTE CLINICA |
| 263369 | HOSPITAL MEXICO | MASCULINO | SAN JOSE | SAN JOSE | URUCA | TUMOR MALIGNO DE LA PIEL DE OTRAS PARTES Y DE LAS NO ESPECIFICADAS DE LA CARA | NO_APLICA | HISTOLOGIA |
| 268107 | HOSPITAL GUAPILES | FEMENINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DEL ENDOCERVIX | NO_APLICA | HISTOLOGIA |
| 264759 | HOSPITAL DR. WILLIAM ALLEN | MASCULINO | CARTAGO | TURRIALBA | LA SUIZA | TUMOR MALIGNO DE LA GLANDULA TIROIDES | NO_APLICA | HISTOLOGIA |
Vamos a repasar la funcionalidad de paste´y paste0.Estas funciones sirven en esencia para concatenar varios strings.La sintaxis básica es como sigue:
paste(..., sep = " ", collapse = NULL)
... representa cualquier número de strings o vectores a ser combinados.
sep representa el caracter de separación entre elementos y es opcional.
collapse es usado para eliminar el espacio entre dos strings.
#Crear en una sola columna provincia+ cantón
salud <- salud %>%
mutate(locacion = paste(PROVINCIA,CANTON,sep="-"),
locacion2 = str_c(CANTON,DISTRITO, sep = "- "))# El analogo de stringr
kable(head(salud,10)) %>%
kable_styling(bootstrap_options = c("striped", "hover"))%>%
scroll_box(width = "900px", height = "500px")| CODIGOCASO | NOMBREESTABLECIMIENTO | SEXO | PROVINCIA | CANTON | DISTRITO | DESC2 | LATERALIDAD | BASEDIAGNOSTICO | locacion | locacion2 |
|---|---|---|---|---|---|---|---|---|---|---|
| 261659 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | SAN JOSE | SAN JOSE | SAN SEBASTIAN | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | CITOLOGIA O HEMATOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- SAN SEBASTIAN |
| 262504 | HOSPITAL MONSENOR SANABRIA | FEMENINO | PUNTARENAS | PUNTARENAS | MANZANILLO | TUMOR MALIGNO DE LA UNION RECTOSIGMOIDEA | NO_APLICA | HISTOLOGIA | PUNTARENAS-PUNTARENAS | PUNTARENAS- MANZANILLO |
| 267637 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | ASERRI | ASERRI | TUMOR MALIGNO DEL GANGLIO LINFATICO, SITIO NO ESPECIFICADO | NO_APLICA | HISTOLOGIA | SAN JOSE-ASERRI | ASERRI- ASERRI |
| 264715 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | SOLAMENTE CLINICA | LIMON-POCOCI | POCOCI- GUAPILES |
| 265213 | HOSPITAL SAN CARLOS | MASCULINO | ALAJUELA | SAN CARLOS | QUESADA | TUMOR MALIGNO DE PIEL DEL LABIO | NO_APLICA | HISTOLOGIA | ALAJUELA-SAN CARLOS | SAN CARLOS- QUESADA |
| 262350 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | SAN JOSE | PAVAS | TUMOR MALIGNO DEL ENDOMETRIO | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- PAVAS |
| 270652 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | FEMENINO | LIMON | GUACIMO | GUACIMO | TUMOR MALIGNO DE LA PIEL DE LA OREJA Y DEL CONDUCTO AUDITIVO EXTERNO | NO_APLICA | SOLAMENTE CLINICA | LIMON-GUACIMO | GUACIMO- GUACIMO |
| 263369 | HOSPITAL MEXICO | MASCULINO | SAN JOSE | SAN JOSE | URUCA | TUMOR MALIGNO DE LA PIEL DE OTRAS PARTES Y DE LAS NO ESPECIFICADAS DE LA CARA | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- URUCA |
| 268107 | HOSPITAL GUAPILES | FEMENINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DEL ENDOCERVIX | NO_APLICA | HISTOLOGIA | LIMON-POCOCI | POCOCI- GUAPILES |
| 264759 | HOSPITAL DR. WILLIAM ALLEN | MASCULINO | CARTAGO | TURRIALBA | LA SUIZA | TUMOR MALIGNO DE LA GLANDULA TIROIDES | NO_APLICA | HISTOLOGIA | CARTAGO-TURRIALBA | TURRIALBA- LA SUIZA |
#Se puede usar la función if dentro de str_c
name <- "Felipe"
time_of_day <- "morning"
birthday <- FALSE
str_c(
"Good ", time_of_day, " ", name,
if (birthday) " and HAPPY BIRTHDAY",
"."
)## [1] "Good morning Felipe."
Dentro de las funcionalidades básicas se encuentran las funciones para “recortar” ciertos strings, según patrones de inicio y finalización:
salud <- salud %>%
mutate(raizCaso = str_sub(CODIGOCASO,1,3))# El analogo de stringr
kable(head(salud,10)) %>%
kable_styling(bootstrap_options = c("striped", "hover"))%>%
scroll_box(width = "900px", height = "500px")| CODIGOCASO | NOMBREESTABLECIMIENTO | SEXO | PROVINCIA | CANTON | DISTRITO | DESC2 | LATERALIDAD | BASEDIAGNOSTICO | locacion | locacion2 | raizCaso |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 261659 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | SAN JOSE | SAN JOSE | SAN SEBASTIAN | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | CITOLOGIA O HEMATOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- SAN SEBASTIAN | 261 |
| 262504 | HOSPITAL MONSENOR SANABRIA | FEMENINO | PUNTARENAS | PUNTARENAS | MANZANILLO | TUMOR MALIGNO DE LA UNION RECTOSIGMOIDEA | NO_APLICA | HISTOLOGIA | PUNTARENAS-PUNTARENAS | PUNTARENAS- MANZANILLO | 262 |
| 267637 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | ASERRI | ASERRI | TUMOR MALIGNO DEL GANGLIO LINFATICO, SITIO NO ESPECIFICADO | NO_APLICA | HISTOLOGIA | SAN JOSE-ASERRI | ASERRI- ASERRI | 267 |
| 264715 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | SOLAMENTE CLINICA | LIMON-POCOCI | POCOCI- GUAPILES | 264 |
| 265213 | HOSPITAL SAN CARLOS | MASCULINO | ALAJUELA | SAN CARLOS | QUESADA | TUMOR MALIGNO DE PIEL DEL LABIO | NO_APLICA | HISTOLOGIA | ALAJUELA-SAN CARLOS | SAN CARLOS- QUESADA | 265 |
| 262350 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | SAN JOSE | PAVAS | TUMOR MALIGNO DEL ENDOMETRIO | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- PAVAS | 262 |
| 270652 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | FEMENINO | LIMON | GUACIMO | GUACIMO | TUMOR MALIGNO DE LA PIEL DE LA OREJA Y DEL CONDUCTO AUDITIVO EXTERNO | NO_APLICA | SOLAMENTE CLINICA | LIMON-GUACIMO | GUACIMO- GUACIMO | 270 |
| 263369 | HOSPITAL MEXICO | MASCULINO | SAN JOSE | SAN JOSE | URUCA | TUMOR MALIGNO DE LA PIEL DE OTRAS PARTES Y DE LAS NO ESPECIFICADAS DE LA CARA | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- URUCA | 263 |
| 268107 | HOSPITAL GUAPILES | FEMENINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DEL ENDOCERVIX | NO_APLICA | HISTOLOGIA | LIMON-POCOCI | POCOCI- GUAPILES | 268 |
| 264759 | HOSPITAL DR. WILLIAM ALLEN | MASCULINO | CARTAGO | TURRIALBA | LA SUIZA | TUMOR MALIGNO DE LA GLANDULA TIROIDES | NO_APLICA | HISTOLOGIA | CARTAGO-TURRIALBA | TURRIALBA- LA SUIZA | 264 |
salud <- salud %>%
mutate(sexo = str_to_lower(str_sub(SEXO, 1, 1)))
kable(head(salud,10)) %>%
kable_styling(bootstrap_options = c("striped", "hover"))%>%
scroll_box(width = "900px", height = "500px")| CODIGOCASO | NOMBREESTABLECIMIENTO | SEXO | PROVINCIA | CANTON | DISTRITO | DESC2 | LATERALIDAD | BASEDIAGNOSTICO | locacion | locacion2 | raizCaso | sexo |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 261659 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | SAN JOSE | SAN JOSE | SAN SEBASTIAN | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | CITOLOGIA O HEMATOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- SAN SEBASTIAN | 261 | m |
| 262504 | HOSPITAL MONSENOR SANABRIA | FEMENINO | PUNTARENAS | PUNTARENAS | MANZANILLO | TUMOR MALIGNO DE LA UNION RECTOSIGMOIDEA | NO_APLICA | HISTOLOGIA | PUNTARENAS-PUNTARENAS | PUNTARENAS- MANZANILLO | 262 | f |
| 267637 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | ASERRI | ASERRI | TUMOR MALIGNO DEL GANGLIO LINFATICO, SITIO NO ESPECIFICADO | NO_APLICA | HISTOLOGIA | SAN JOSE-ASERRI | ASERRI- ASERRI | 267 | f |
| 264715 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | SOLAMENTE CLINICA | LIMON-POCOCI | POCOCI- GUAPILES | 264 | m |
| 265213 | HOSPITAL SAN CARLOS | MASCULINO | ALAJUELA | SAN CARLOS | QUESADA | TUMOR MALIGNO DE PIEL DEL LABIO | NO_APLICA | HISTOLOGIA | ALAJUELA-SAN CARLOS | SAN CARLOS- QUESADA | 265 | m |
| 262350 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | SAN JOSE | PAVAS | TUMOR MALIGNO DEL ENDOMETRIO | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- PAVAS | 262 | f |
| 270652 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | FEMENINO | LIMON | GUACIMO | GUACIMO | TUMOR MALIGNO DE LA PIEL DE LA OREJA Y DEL CONDUCTO AUDITIVO EXTERNO | NO_APLICA | SOLAMENTE CLINICA | LIMON-GUACIMO | GUACIMO- GUACIMO | 270 | f |
| 263369 | HOSPITAL MEXICO | MASCULINO | SAN JOSE | SAN JOSE | URUCA | TUMOR MALIGNO DE LA PIEL DE OTRAS PARTES Y DE LAS NO ESPECIFICADAS DE LA CARA | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- URUCA | 263 | m |
| 268107 | HOSPITAL GUAPILES | FEMENINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DEL ENDOCERVIX | NO_APLICA | HISTOLOGIA | LIMON-POCOCI | POCOCI- GUAPILES | 268 | f |
| 264759 | HOSPITAL DR. WILLIAM ALLEN | MASCULINO | CARTAGO | TURRIALBA | LA SUIZA | TUMOR MALIGNO DE LA GLANDULA TIROIDES | NO_APLICA | HISTOLOGIA | CARTAGO-TURRIALBA | TURRIALBA- LA SUIZA | 264 | m |
En el paquete existen tres funciones que pueden ser utilizadas para buscar patrones específicos en los datos:
str_detect()str_replace()str_count()#str_detect()
# Responde a la pregunta: Contiene el string el patrón ingresado por el usuario?
salud <- salud %>%
mutate(Hospital = str_detect(NOMBREESTABLECIMIENTO,"HOSPITAL"))
kable(head(salud,10)) %>%
kable_styling(bootstrap_options = c("striped", "hover"))%>%
scroll_box(width = "900px", height = "500px")| CODIGOCASO | NOMBREESTABLECIMIENTO | SEXO | PROVINCIA | CANTON | DISTRITO | DESC2 | LATERALIDAD | BASEDIAGNOSTICO | locacion | locacion2 | raizCaso | sexo | Hospital |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 261659 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | SAN JOSE | SAN JOSE | SAN SEBASTIAN | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | CITOLOGIA O HEMATOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- SAN SEBASTIAN | 261 | m | TRUE |
| 262504 | HOSPITAL MONSENOR SANABRIA | FEMENINO | PUNTARENAS | PUNTARENAS | MANZANILLO | TUMOR MALIGNO DE LA UNION RECTOSIGMOIDEA | NO_APLICA | HISTOLOGIA | PUNTARENAS-PUNTARENAS | PUNTARENAS- MANZANILLO | 262 | f | TRUE |
| 267637 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | ASERRI | ASERRI | TUMOR MALIGNO DEL GANGLIO LINFATICO, SITIO NO ESPECIFICADO | NO_APLICA | HISTOLOGIA | SAN JOSE-ASERRI | ASERRI- ASERRI | 267 | f | TRUE |
| 264715 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | SOLAMENTE CLINICA | LIMON-POCOCI | POCOCI- GUAPILES | 264 | m | TRUE |
| 265213 | HOSPITAL SAN CARLOS | MASCULINO | ALAJUELA | SAN CARLOS | QUESADA | TUMOR MALIGNO DE PIEL DEL LABIO | NO_APLICA | HISTOLOGIA | ALAJUELA-SAN CARLOS | SAN CARLOS- QUESADA | 265 | m | TRUE |
| 262350 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | SAN JOSE | PAVAS | TUMOR MALIGNO DEL ENDOMETRIO | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- PAVAS | 262 | f | TRUE |
| 270652 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | FEMENINO | LIMON | GUACIMO | GUACIMO | TUMOR MALIGNO DE LA PIEL DE LA OREJA Y DEL CONDUCTO AUDITIVO EXTERNO | NO_APLICA | SOLAMENTE CLINICA | LIMON-GUACIMO | GUACIMO- GUACIMO | 270 | f | TRUE |
| 263369 | HOSPITAL MEXICO | MASCULINO | SAN JOSE | SAN JOSE | URUCA | TUMOR MALIGNO DE LA PIEL DE OTRAS PARTES Y DE LAS NO ESPECIFICADAS DE LA CARA | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- URUCA | 263 | m | TRUE |
| 268107 | HOSPITAL GUAPILES | FEMENINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DEL ENDOCERVIX | NO_APLICA | HISTOLOGIA | LIMON-POCOCI | POCOCI- GUAPILES | 268 | f | TRUE |
| 264759 | HOSPITAL DR. WILLIAM ALLEN | MASCULINO | CARTAGO | TURRIALBA | LA SUIZA | TUMOR MALIGNO DE LA GLANDULA TIROIDES | NO_APLICA | HISTOLOGIA | CARTAGO-TURRIALBA | TURRIALBA- LA SUIZA | 264 | m | TRUE |
#str_count()
# Responde a la pregunta: Cuantas veces el patrón se encuentra en el string?
salud <- salud %>%
mutate(HOSPITALCount = str_count(NOMBREESTABLECIMIENTO,"HOSPITAL"))
kable(head(salud,10)) %>%
kable_styling(bootstrap_options = c("striped", "hover"))%>%
scroll_box(width = "900px", height = "500px")| CODIGOCASO | NOMBREESTABLECIMIENTO | SEXO | PROVINCIA | CANTON | DISTRITO | DESC2 | LATERALIDAD | BASEDIAGNOSTICO | locacion | locacion2 | raizCaso | sexo | Hospital | HOSPITALCount |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 261659 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | SAN JOSE | SAN JOSE | SAN SEBASTIAN | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | CITOLOGIA O HEMATOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- SAN SEBASTIAN | 261 | m | TRUE | 1 |
| 262504 | HOSPITAL MONSENOR SANABRIA | FEMENINO | PUNTARENAS | PUNTARENAS | MANZANILLO | TUMOR MALIGNO DE LA UNION RECTOSIGMOIDEA | NO_APLICA | HISTOLOGIA | PUNTARENAS-PUNTARENAS | PUNTARENAS- MANZANILLO | 262 | f | TRUE | 1 |
| 267637 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | ASERRI | ASERRI | TUMOR MALIGNO DEL GANGLIO LINFATICO, SITIO NO ESPECIFICADO | NO_APLICA | HISTOLOGIA | SAN JOSE-ASERRI | ASERRI- ASERRI | 267 | f | TRUE | 1 |
| 264715 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | SOLAMENTE CLINICA | LIMON-POCOCI | POCOCI- GUAPILES | 264 | m | TRUE | 1 |
| 265213 | HOSPITAL SAN CARLOS | MASCULINO | ALAJUELA | SAN CARLOS | QUESADA | TUMOR MALIGNO DE PIEL DEL LABIO | NO_APLICA | HISTOLOGIA | ALAJUELA-SAN CARLOS | SAN CARLOS- QUESADA | 265 | m | TRUE | 1 |
| 262350 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | SAN JOSE | PAVAS | TUMOR MALIGNO DEL ENDOMETRIO | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- PAVAS | 262 | f | TRUE | 1 |
| 270652 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | FEMENINO | LIMON | GUACIMO | GUACIMO | TUMOR MALIGNO DE LA PIEL DE LA OREJA Y DEL CONDUCTO AUDITIVO EXTERNO | NO_APLICA | SOLAMENTE CLINICA | LIMON-GUACIMO | GUACIMO- GUACIMO | 270 | f | TRUE | 1 |
| 263369 | HOSPITAL MEXICO | MASCULINO | SAN JOSE | SAN JOSE | URUCA | TUMOR MALIGNO DE LA PIEL DE OTRAS PARTES Y DE LAS NO ESPECIFICADAS DE LA CARA | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- URUCA | 263 | m | TRUE | 1 |
| 268107 | HOSPITAL GUAPILES | FEMENINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DEL ENDOCERVIX | NO_APLICA | HISTOLOGIA | LIMON-POCOCI | POCOCI- GUAPILES | 268 | f | TRUE | 1 |
| 264759 | HOSPITAL DR. WILLIAM ALLEN | MASCULINO | CARTAGO | TURRIALBA | LA SUIZA | TUMOR MALIGNO DE LA GLANDULA TIROIDES | NO_APLICA | HISTOLOGIA | CARTAGO-TURRIALBA | TURRIALBA- LA SUIZA | 264 | m | TRUE | 1 |
#str_replace()
# Reemplaza un patrón si existe match con el string
salud <- salud %>%
mutate(NOMBREESTABLECIMIENTO = str_replace(NOMBREESTABLECIMIENTO, "<cd>", ""))
kable(head(salud,10)) %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
scroll_box(width = "900px", height = "500px")| CODIGOCASO | NOMBREESTABLECIMIENTO | SEXO | PROVINCIA | CANTON | DISTRITO | DESC2 | LATERALIDAD | BASEDIAGNOSTICO | locacion | locacion2 | raizCaso | sexo | Hospital | HOSPITALCount |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 261659 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | SAN JOSE | SAN JOSE | SAN SEBASTIAN | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | CITOLOGIA O HEMATOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- SAN SEBASTIAN | 261 | m | TRUE | 1 |
| 262504 | HOSPITAL MONSENOR SANABRIA | FEMENINO | PUNTARENAS | PUNTARENAS | MANZANILLO | TUMOR MALIGNO DE LA UNION RECTOSIGMOIDEA | NO_APLICA | HISTOLOGIA | PUNTARENAS-PUNTARENAS | PUNTARENAS- MANZANILLO | 262 | f | TRUE | 1 |
| 267637 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | ASERRI | ASERRI | TUMOR MALIGNO DEL GANGLIO LINFATICO, SITIO NO ESPECIFICADO | NO_APLICA | HISTOLOGIA | SAN JOSE-ASERRI | ASERRI- ASERRI | 267 | f | TRUE | 1 |
| 264715 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | MASCULINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DE LA MEDULA OSEA | NO_APLICA | SOLAMENTE CLINICA | LIMON-POCOCI | POCOCI- GUAPILES | 264 | m | TRUE | 1 |
| 265213 | HOSPITAL SAN CARLOS | MASCULINO | ALAJUELA | SAN CARLOS | QUESADA | TUMOR MALIGNO DE PIEL DEL LABIO | NO_APLICA | HISTOLOGIA | ALAJUELA-SAN CARLOS | SAN CARLOS- QUESADA | 265 | m | TRUE | 1 |
| 262350 | HOSPITAL SAN JUAN DE DIOS | FEMENINO | SAN JOSE | SAN JOSE | PAVAS | TUMOR MALIGNO DEL ENDOMETRIO | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- PAVAS | 262 | f | TRUE | 1 |
| 270652 | HOSPITAL DR. RAFAEL A. CALDERON GUARDIA | FEMENINO | LIMON | GUACIMO | GUACIMO | TUMOR MALIGNO DE LA PIEL DE LA OREJA Y DEL CONDUCTO AUDITIVO EXTERNO | NO_APLICA | SOLAMENTE CLINICA | LIMON-GUACIMO | GUACIMO- GUACIMO | 270 | f | TRUE | 1 |
| 263369 | HOSPITAL MEXICO | MASCULINO | SAN JOSE | SAN JOSE | URUCA | TUMOR MALIGNO DE LA PIEL DE OTRAS PARTES Y DE LAS NO ESPECIFICADAS DE LA CARA | NO_APLICA | HISTOLOGIA | SAN JOSE-SAN JOSE | SAN JOSE- URUCA | 263 | m | TRUE | 1 |
| 268107 | HOSPITAL GUAPILES | FEMENINO | LIMON | POCOCI | GUAPILES | TUMOR MALIGNO DEL ENDOCERVIX | NO_APLICA | HISTOLOGIA | LIMON-POCOCI | POCOCI- GUAPILES | 268 | f | TRUE | 1 |
| 264759 | HOSPITAL DR. WILLIAM ALLEN | MASCULINO | CARTAGO | TURRIALBA | LA SUIZA | TUMOR MALIGNO DE LA GLANDULA TIROIDES | NO_APLICA | HISTOLOGIA | CARTAGO-TURRIALBA | TURRIALBA- LA SUIZA | 264 | m | TRUE | 1 |
Otra de las tantas formas de trabajar con strings es cuando un string se debe “partir” en varios en función de algún patrón:
#str_split
nombres <- c("Box, George", "Cox, David")
nombres_split <- str_split(nombres, pattern = fixed(", "), simplify = TRUE)
primer <- nombres_split[, 2]
apellido <- nombres_split[, 1]
primer;apellido## [1] "George" "David"
## [1] "Box" "Cox"
Ejercicio
1- Recopile los nombres y apellidos de los compañeros de su grupo, en un dataframe en una sola columna.
2- Cambie el vector de nombres de, por ejemplo “Daenarys Acuña” a su forma abreviada “D. Acuña”.
regex)Existe una forma muy poderosa de realizar reconocimiento de patrones mediante el lenguaje de expresiones regulares.Combinando expresiones regulares con las funciones del paquete stringr, se puede incrementar el poder de la manipualción de strings exponencialmente.
Vamos a utilizar primero la función str_view , cuya funcionalidad es visualizar el match entre el patrón y el string.Posteriormente se utilizarán las funciones ya revisadas, pero con patrones de regex.
El patrón más básico es mediante el uso de strings:
#install.packages("htmlwidgets")
library(htmlwidgets)
# str_view se utiliza para observa el match del patrón
x <- c("apple", "banana", "pear")
str_view(x, "an")El siguiente nivel de complejidad lo agrega el patrón . que significa "cualquier caracter:
Ahora bien, si . hace el match con cualquier caracter, como se realiza el match del caracter “.” ?
Para esto, se realiza la operación “escape” ( en inglés ) con el que se le indica a regex que se desea realizar el match de ese caracter en partricular.El “escape” se realiza con el caracter \\.Entonces, para realizar el match de “.” se debe utilizar \\. .
*Notese que para el caracter “" se debe utilizar el escape \\\\.Esto que debido para escribir el caracter”" en R, se debe hacer \\.
Por defecto, las expresiones regulares realizan el match sobre cualquier parte del string.Para realizar el match al inicio o al final del string se utiliza:
^ Para el match del comienzo del string.$ Para el match del final del string.diagnostico<-str_trim(str_to_lower(as.character(salud$BASEDIAGNOSTICO[1:10])))
str_view_all(nombre,"^hospital")Para recordar cual es cual, recuerde lo siguiente: "Si usted empieza con el poder ^ termina con el dinero $.
Existen algunos patrones especiales para realizar el match de más de un caracter:
\\d: cualquier dígito. \\s: cualquier espacio blanco (space, tab, newline). [abc]: match a, b, or c. [^abc]: match cualquier cosa excepto a, b, or c. [w]: match cualquier palabra
Existe una serie de clases preconstruídas , que se utilizan dentro de []:
[:punct:]: punctuation. [:alpha:]: letras. [:lower:]: letras minusculas. [:upper:]: letras mayusculas. [:digit:]: digitos. [:xdigit:]: digitos hex. [:alnum:]: letras y números. [:graph:]: letras, números y puntuación. [:print:]: letras, números y puntuación y espacio en blanco. [:space:]: equivalente a \s. [:blank:]: espacio y tab.
Se puede controlar cuantas veces un patrón empata con operadores de repetición
?: 0 o 1. +: 1 o más. *: 0 o más.
## [1] "CC"
## [1] "CCC"
## [1] "XXX"
También se puede especificar el número de repeticiones específicamente:
{n}: exactamente n {n,}: n o más {,m}: como máximo m {n,m}: entre n y m
## [1] "CC"
## [1] "CCC"
## [1] "XXX"
| es el operador de alternación, para que se puede escoger entre varios patrones:
## [1] "hospital dr. rafael a. calderon guardia"
## [2] "hospital monsenor sanabria"
## [3] "hospital san juan de dios"
## [4] "hospital dr. rafael a. calderon guardia"
## [5] "hospital san carlos"
## [6] "hospital san juan de dios"
## [7] "hospital dr. rafael a. calderon guardia"
## [8] "hospital mexico"
## [9] "hospital guapiles"
## [10] "hospital dr. william allen"
## [11] "hospital san juan de dios"
## [12] "hospital san juan de dios"
## [13] "hospital san juan de dios"
## [14] "hospital san juan de dios"
## [15] "hospital dr. rafael a. calderon guardia"
## [16] "area de salud de hatillo (cl. dr. solon nunez f.)"
## [17] "hospital dr. max peralta jimenez"
## [18] "hospital san juan de dios"
## [19] "hospital mexico"
## [20] "hospital dr. rafael a. calderon guardia"
## [1] 14 10 9 14 6 9 14 6 7 8 9 9 9 9 14 14 10 9 6 14
## [1] 39 26 25 39 19 25 39 15 17 26 25 25 25 25 39 49 32 25 15 39
## [1] 0.3589744 0.3846154 0.3600000 0.3589744 0.3157895 0.3600000 0.3589744
## [8] 0.4000000 0.4117647 0.3076923 0.3600000 0.3600000 0.3600000 0.3600000
## [15] 0.3589744 0.2857143 0.3125000 0.3600000 0.4000000 0.3589744
# contar la proporción de strings con más de dos vocales seguidos
str_view_all(nombre,"[aeiou]{2,}?")## [1] 1732
## [1] 36
## [1] 35
# Cuantos son el Hospital Calderón Guardia
length(str_subset(salud$NOMBREESTABLECIMIENTO, "GUARDIA$"))## [1] 332
## [1] "-pple" "p-ar" "b-nana"
## [1] "-ppl-" "p--r" "b-n-n-"
#Reemplaza "." por espacio vacío.
head(str_replace_all(salud$NOMBREESTABLECIMIENTO, "[:punct:]", ""),10)## [1] "HOSPITAL DR RAFAEL A CALDERON GUARDIA"
## [2] "HOSPITAL MONSENOR SANABRIA"
## [3] "HOSPITAL SAN JUAN DE DIOS"
## [4] "HOSPITAL DR RAFAEL A CALDERON GUARDIA"
## [5] "HOSPITAL SAN CARLOS"
## [6] "HOSPITAL SAN JUAN DE DIOS"
## [7] "HOSPITAL DR RAFAEL A CALDERON GUARDIA"
## [8] "HOSPITAL MEXICO"
## [9] "HOSPITAL GUAPILES"
## [10] "HOSPITAL DR WILLIAM ALLEN"
Se utiliza () para definir grupos de diferentes patrones(match agrupado:
## [1] "The birch canoe slid on the smooth planks."
## [2] "Glue the sheet to the dark blue background."
## [3] "It's easy to tell the depth of a well."
## [4] "These days a chicken leg is a rare dish."
## [5] "Rice is often served in round bowls."
## [6] "The juice of lemons makes fine punch."
## [7] "The box was thrown beside the parked truck."
## [8] "The hogs were fed chopped corn and garbage."
## [9] "Four hours of steady work faced us."
## [10] "Large size in stockings is hard to sell."
## [11] "The boy was there when the sun rose."
## [12] "A rod is used to catch pink salmon."
## [13] "The source of the huge river is the clear spring."
## [14] "Kick the ball straight and follow through."
## [15] "Help the woman get back to her feet."
## [16] "A pot of tea helps to pass the evening."
## [17] "Smoky fires lack flame and heat."
## [18] "The soft cushion broke the man's fall."
## [19] "The salt breeze came across from the sea."
## [20] "The girl at the booth sold fifty bonds."
noun <- "(a|the) ([^\\d ]+)"
has_noun <- sentences %>%
str_subset(noun) %>%
head(10)
str_view_all(has_noun,noun)## [1] "the smooth" "the sheet" "the depth" "a chicken" "the parked"
## [6] "the sun" "the huge" "the ball" "the woman" "a helps"
https://r4ds.had.co.nz/strings.html#matching-patterns-with-regular-expressions https://www.gastonsanchez.com/Handling_and_Processing_Strings_in_R.pdf https://data-flair.training/blogs/r-string-manipulation/ https://www.tutorialspoint.com/r/r_strings.htm https://stringr.tidyverse.org/articles/regular-expressions.html https://rstudio-pubs-static.s3.amazonaws.com/268250_56d3e5dd2f72409d80f4d0ad8583f95a.html
[kable:]https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html