1. Objetos en R

Existen diferentes tipos de estructuras de datos en R como son los vectores, las matrices, los arreglos multidimensionales, los factores, las listas, data frames y funciones. Un ejemplo gráfico se presenta a continuación.

Tipos de Objetos en R

1.1. Vectores

Los vectores son un tipo de objeto tiene una sola dimensión, pueden ser numéricos, lógicos y de caracter. En el caso de los vectores numéricos se utilizan las siguientes funciones:

Para asignar al objeto a el valor de 1.7, se puede usar <- o =.

a<-1.7 
a=1.7 

También se puede hacer a través de la función assign

assign("a", 1.7)

Asignando al objeto b los valores 10, 11, 15, 19

b<-c(10,11,15,19)

Para imprimir lo que se ha guardado en un objeto se puede usar la función print o simplemente escribiendo el nombre del objeto en la consola.

print(b)
## [1] 10 11 15 19
b
## [1] 10 11 15 19

Para generar un vector con una secuencia de números del 1 al 20

x<-1:20 
x=seq(1:20)  #con la función sequence 

Una secuencia de números del 1 al 10 con un incremento de 0.5

seq(from=0, to=10, by=0.5)
##  [1]  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0
## [16]  7.5  8.0  8.5  9.0  9.5 10.0

generar 30 números del 5 al 10 sin importar el incremento

seq(5,10,length=30)
##  [1]  5.000000  5.172414  5.344828  5.517241  5.689655  5.862069  6.034483
##  [8]  6.206897  6.379310  6.551724  6.724138  6.896552  7.068966  7.241379
## [15]  7.413793  7.586207  7.758621  7.931034  8.103448  8.275862  8.448276
## [22]  8.620690  8.793103  8.965517  9.137931  9.310345  9.482759  9.655172
## [29]  9.827586 10.000000

función para crear un vector que contiene 40 elementos y todos son ceros.

rep(0, times=40)
##  [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [39] 0 0

si se quiere crear un vector que repita 10 veces el vector (0,1,2)

rep(c(0,1,2), times=10)
##  [1] 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2

Ahora lo que queremos que contenga 10 ceros, 10 unos y 10 dos.

rep(c(0, 1, 2), each = 10)
##  [1] 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2

Si queremos conocer que elemento está en la posición 3 del vector x

x[3]
## [1] 3

Las posiciones 3 y 4 del vector x.

x[c(3,4)]
## [1] 3 4

Las posiciones de la 1 a la 10.

x[1:10]
##  [1]  1  2  3  4  5  6  7  8  9 10

Los vectores lógicos son aquellos que contienen datos dicotómicos de TRUE/FALSE, y generalmente se generan cuando se quiere evaluar o medir si un vector cumple con una condición.

Por ejemplo, se genera un vector con estos valores y se asigna a vect.

vect<-c(0.5,55,-10,6) 

Se quiere identificar cuáles elementos del vector vect son menores a 1 y se guarda el resultado en tf, donde este sería un vector lógico.

tf<-vect<1

Se quiere identificar cuáles elementos del vector num_vect son mayores o iguales a 6

vect>=6
## [1] FALSE  TRUE FALSE  TRUE

Otro operadores lógicos son: >, <=, == para igualdad exacta, y != para diferencia.

Corra los siguientes comando y verifique los resultados.

A<-c(0,1,12)
B<-c(3,4,5)

condicion1<-A>10 & B >10
condicion2<-A >10 | B >10
condicion3<-A!=0

Por último, los vectores de caracteres son vectores cuyo valores corresponden a texto, se genera de la misma forma, sólo que sus elementos van entre comillas.

carac_vect<-c("Mi", "nombre", "es")
carac_vect1<-"Mi nombre es" #otra forma de generarlo
substr(carac_vect1, 1, 9)  #extraer texto en un vector de caracteres
## [1] "Mi nombre"

1.2. Matrices

Las matrices son un tipo de vector particular con un atributo especial, llamado dimensión. La dimensión nos dice el número de filas y columnas que vamos a tener en una matriz. Recordemos que una matriz no es más que un arreglo de números en filas y columnas, pero todas las columnas deben ser del mismo tipo (numéricas, caracteres, lógicos)

Las matrices son creadas explícitamente con la función matrix(), en ella podemos poner como primer argumento los elementos de la matriz, los siguientes dos son las dimensiones que corresponde al número de renglones y de columnas.

Para crear una matrix con 4 filas y 5 columnas y asignarlo al objeto mi_matrix:

mi_matrix<-matrix(1:20, 4, 5)
mi_matrix
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20

Si se genera un vector de caracteres con nombres y se pega en la matriz, se utiliza la función cbind

pacientes<-c("Juan", "Gina", "Kelly", "Jhon")
cbind(pacientes,mi_matrix)
##      pacientes                       
## [1,] "Juan"    "1" "5" "9"  "13" "17"
## [2,] "Gina"    "2" "6" "10" "14" "18"
## [3,] "Kelly"   "3" "7" "11" "15" "19"
## [4,] "Jhon"    "4" "8" "12" "16" "20"

Para consultar la fila 1 de la matrix:

mi_matrix[1,] 
## [1]  1  5  9 13 17

consultar la columna 1 de la matrix:

mi_matrix[,1] 
## [1] 1 2 3 4

Para consultar el valor de la fila 1 y la columna 1 de la matrix:

mi_matrix[1,1]  
## [1] 1

1.3. Dataframes

El dataframe es otro tipo de objeto muy común, dado que tiene la dimensión de una matriz, filas y columnas, pero permite tener diferentes tipos de columnas, tal cual como se presenta en una base de datos.

Si creamos inicialmente estos dos vectores, estado que es un vector de caracteres e ingresos que es numérico:

estado <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa",
            "qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas",
            "sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa",
            "sa", "act", "nsw", "vic", "vic", "act")

ingresos <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
             61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
             59, 46, 58, 43)

Para crear un dataframe a partir de estos dos vectores se usa la función data.frame

datos <- data.frame(Est=estado, ing=ingresos) 

Otra forma de crearlo, es ingresando directamente los vectores y asignando los nombres a cada uno:

df <- data.frame(edad=c(25,32,35,40), grupo=c("a", "b", "c", "a"))
df

Para realizar consultas se puede hacer de diferentes formas, usando $ con el nombre de la variable o de la misma forma que en la matriz con [] asignando las posiciones de fila y columna.

Para consultar valores de la columna edad:

df$edad     
## [1] 25 32 35 40
df[1] #consultar la columna 1
df[1,] #consultar la fila 1

Para consultar valores de la columna grupo:

df$grupo
## [1] "a" "b" "c" "a"
df[,2]
## [1] "a" "b" "c" "a"

Para importar una base de datos, se puede hacer a través de ventana o directamente con código. En la ventana objetos/variables, se da clic en import Dataset y de acuerdo al tipo de archivo se selecciona la opción.

También usando la función read_csv o read_excel con la ruta del archivo.

#datos <- read_csv("C:/Users/delia/Desktop/Casos_positivos_de_COVID-19_en_Colombia (1).csv")

2. Pre-procesamiento de una base de datos

En este apartado vamos a revisar cómo realizar filtros en un dataframe, seleccionar subsets de datos y crear variables. Para esto se utilizará la libreria tidyverse que ya tienen implementado estas funciones.

#install.packages("tidyverse")
library(tidyverse)

Para explorar las funciones de la libreria se utilizara la base de datos de bajo peso Low_bw que contiene las variables: BajoPeso, Edad, Raza, Fuma, Hipertension y Peso.

library(readxl)
datos <- read_excel("~/Documents/Delia Ortega 2023/escritorio/CursoR_SaludPublica/Bases_datos/Low_bw.xlsx")

Los nombres de las variables contenidas en la base:

names(datos)
## [1] "id"           "BajoPeso"     "Edad"         "Raza"         "Fuma"        
## [6] "Hipertension" "Peso"

Para describir las variables que tiene la base:

Para renombrar una variable se usa la función rename, donde se debe especificar el nombre de la base de datos y los nombres nuevos de la o las variables.

rename(datos,BP=BajoPeso,identificador=id)
datos2=rename(datos,BP=BajoPeso,identificador=id) #se guarda en una copia de la base denominada datos2

2.1. Filtros

A continuación, se explica el uso de la función filter, el cual permite hacer filtros en una base de datos por filas. Estas nuevas bases se guardarán en otras bases de datos para no afectar la original denominada datos

Para filtrar por filas que cumplan con una condición:

datos3<-filter(datos,BajoPeso=="No")
datos3[1:5,]

Se pueden usar operadores lógicos como y “&” o “|”:

datos4<-filter(datos,BajoPeso=="No" & Fuma=="No")
datos4[1:5,]

Con variables cuantitativas:

datos5<-filter(datos, Peso<=2500)
datos5[1:5,]

2.2. Seleccionar

Para realizar filtos de una base de datos por columnas se utiliza la función select.

Si se quiere realizar un subset de la base sólo con dos variables:

B1<-select(datos, id, BajoPeso, Edad)
B1[1:5,]

Hacer una selección donde se quiere es excluir algunas variables:

B2<-select(datos,-Raza) 
B2[1:5,]

Seleccionar variables que inicien con una letra o frase específica:

B3<-select(datos,starts_with("P")) 
B3[1:5,]

Finalmente, para unir dos base de datos que tiene el mismo orden:

B4<-bind_cols(B1,B3)
B4[1:5,]

2.3. Ordenar

Para ordenar la base de datos por los valores de una variable se utilizará la función arrange.

Para ordenar por los valores de una variable como Edad, la opción por defecto ordena en forma ascendente:

Orden1<-arrange(datos, Edad)
Orden1[1:5,]

Para ordenar de forma descendente:

Orden2<-arrange(datos,desc(Edad))
Orden2[1:5,]

Por una variable categórica también se puede hacer:

Orden3<-arrange(datos, Raza)
Orden3[1:5,]

Por varias variables:

Orden4<-arrange(datos, Raza, Fuma)
Orden4[1:5,]

2.4. Crear variables

Para crear nuevas variables, en este caso pasar el peso de gramos a libras:

D1<-mutate(datos, Peso2=Peso/454)
D1[1:5,]

Para crear una variable categórica a partir de una cuantitativa:

D2<-mutate(datos, Peso_cat=ifelse(Peso<=2500, "bajo",ifelse(Peso<=4000, "normal","Alto")))
D2[1:5,]

Otra forma de hacerlo:

D2$Peso_cat2<-case_when(D2$Peso<=2500 ~ "bajo",
D2$Peso>2500 & D2$Peso<=4000 ~ "normal",
D2$Peso>4000 ~ "alto")
D2[1:5,]

Para combinar categorias:

D2$Peso_cat3<-recode(D2$Peso_cat2, bajo="bajo", normal="bajo",
alto="normal")

Si se quiere borrar la variable:

D2$Peso_cat3<-NULL
D2[1:5,]

Para crear variables dummy, es decir, variables indicadoras a partir de variables categóricas:

#install.packages("fastDummies")
library(fastDummies)
D3<-dummy_cols(datos,select_columns = "Raza")
D3[1:5,]