A.2 Cap. 3: Estructuras de datos

  1. Crea una variable llamada datosNumeros que contenga 200 números (decimales) entre el 20 y 80.

Solución:

datosNumeros <- seq(20, 80, length=200)

### Función head() para ver los 20 primeros elementos del vector
head(datosNumeros, 20)
#  [1] 20.00 20.30 20.60 20.90 21.21 21.51 21.81 22.11 22.41 22.71 23.02 23.32 23.62
# [14] 23.92 24.22 24.52 24.82 25.13 25.43 25.73
  1. Utilizando la función sample(), crea una variable llamada muestr4 que contenga el muestreo de 10 elementos (con repetición) del objeto datosNumeros. Utiliza set.seed(123) antes del muestro para asegurar la replicabilidad del mismo.

Solución:

set.seed(123)
muestr4 <- sample(datosNumeros, 10, replace = TRUE)

### Revisar el contenido
muestr4
#  [1] 67.64 73.67 23.92 78.49 70.95 34.77 55.28 32.66 23.92 55.28
  1. Redondea todos los elementos del vector datosNumeros a dos decimales, coerciona el objeto a texto, y guarda el resultado en el ambiente con el nombre coer.

Solución:

### Redondear datosNumeros
r <- round(datosNumeros, 2)

### Coercer hacia texto
coer <- as.character(r) 

### Revisar el contenido
head(coer, 20)
#  [1] "20"    "20.3"  "20.6"  "20.9"  "21.21" "21.51" "21.81" "22.11" "22.41" "22.71"
# [11] "23.02" "23.32" "23.62" "23.92" "24.22" "24.52" "24.82" "25.13" "25.43" "25.73"

Se puede coercer un número a texto, dado que solo se necesita colocar el número entre comillas para sea considerado así.

  1. Utiliza coer para coercer el objeto hacia número nuevamente.

Solución:

### Redondear datosNumeros
as.numeric(coer)
#   [1] 20.00 20.30 20.60 20.90 21.21 21.51 21.81 22.11 22.41 22.71 23.02 23.32 23.62
#  [14] 23.92 24.22 24.52 24.82 25.13 25.43 25.73 26.03 26.33 26.63 26.93 27.24 27.54
#  [27] 27.84 28.14 28.44 28.74 29.05 29.35 29.65 29.95 30.25 30.55 30.85 31.16 31.46
#  [40] 31.76 32.06 32.36 32.66 32.96 33.27 33.57 33.87 34.17 34.47 34.77 35.08 35.38
#  [53] 35.68 35.98 36.28 36.58 36.88 37.19 37.49 37.79 38.09 38.39 38.69 38.99 39.30
#  [66] 39.60 39.90 40.20 40.50 40.80 41.11 41.41 41.71 42.01 42.31 42.61 42.91 43.22
#  [79] 43.52 43.82 44.12 44.42 44.72 45.03 45.33 45.63 45.93 46.23 46.53 46.83 47.14
#  [92] 47.44 47.74 48.04 48.34 48.64 48.94 49.25 49.55 49.85 50.15 50.45 50.75 51.06
# [105] 51.36 51.66 51.96 52.26 52.56 52.86 53.17 53.47 53.77 54.07 54.37 54.67 54.97
# [118] 55.28 55.58 55.88 56.18 56.48 56.78 57.09 57.39 57.69 57.99 58.29 58.59 58.89
# [131] 59.20 59.50 59.80 60.10 60.40 60.70 61.01 61.31 61.61 61.91 62.21 62.51 62.81
# [144] 63.12 63.42 63.72 64.02 64.32 64.62 64.92 65.23 65.53 65.83 66.13 66.43 66.73
# [157] 67.04 67.34 67.64 67.94 68.24 68.54 68.84 69.15 69.45 69.75 70.05 70.35 70.65
# [170] 70.95 71.26 71.56 71.86 72.16 72.46 72.76 73.07 73.37 73.67 73.97 74.27 74.57
# [183] 74.87 75.18 75.48 75.78 76.08 76.38 76.68 76.98 77.29 77.59 77.89 78.19 78.49
# [196] 78.79 79.10 79.40 79.70 80.00

Como es notorio, se puede coercer un texto que contenga “números” hacia numeric sin problema, dado que R, al quitarle las comillas a cada elemento, se encuentra con un valor numérico correcto.

  1. Crea el vector miPais que contenga únicamente el nombre de tu país de residencia. Coerce miPaishacia vector numérico. ¿Notas la advertencia?

Solución:

### Crear la variable
miPais <- "Peru"

### Coercer hacia número
as.numeric(miPais)
# Warning: NAs introducidos por coerción
# [1] NA

La advertencia NAs introduced by coercion implica que como al quitar las comillas, lo que queda es una palabra en lugar de un número, R no puede darle valor numérico y lo reemplaza por un NA.

  1. Crea una data frame llamada DF10, cuyo contenido sea: una columna numérica, otra de texto, y otra lógica, todas de 5 elementos. Coerce DF10 hacia matriz. ¿Notas algo particular en los elementos de la matriz?

Solución:

### Crear la variable
DF10 <- data.frame(
  COL1 = 1:5,
  COL2 = c("Text1", "Text2", "Text3", "Text4", "Text5"),
  COL3 = c(T, F, T, F, T)
)

### Coercer hacia matriz
as.matrix(DF10)
#      COL1 COL2    COL3   
# [1,] "1"  "Text1" "TRUE" 
# [2,] "2"  "Text2" "FALSE"
# [3,] "3"  "Text3" "TRUE" 
# [4,] "4"  "Text4" "FALSE"
# [5,] "5"  "Text5" "TRUE"

Todos los elementos de una matriz deben pertenecer a la misma clase. No puede haber matrices con columnas numérica y de texto a la vez. Aquí entra en juego el concepto de supremacía de clase. Esto aplica cuando la estructura hacia la cual se está coerciendo tiene como limitación el contener solo una clase de elementos (i.e., vectores y matrices).

  • La clase carácter prima sobre las demás clases en el lenguaje R. En presencia de tan solo un elemento de texto, toda la matriz se convierte en elementos textuales.
  • En ausencia de elementos de clase carácter, los elementos numéricos (decimales o enteros) priman sobre los lógicos. Los TRUE se convierten en 1, y los FALSE en 0.
  1. Crea una lista que contenga los objetos: muestr4, datosNumeros,DF10. Para hacer el ejercicio replicable, respeta el orden mencionado. Luego, indexa las posiciones:
    - Fila 2, columna 3 del objeto DF10.
    - Elemento 150 del objeto datosNumeros.
    - El elemento 5 del objeto muestr4.

    Realiza esto utilizando tanto una lista nombra (list1) como no nombrada (list2).

Solución:

### Crear la lista nombrada
list1 <- dplyr::lst(muestr4, datosNumeros, DF10)

### Ubicar las indexaciones de la lista nombrada
list1$DF10$COL3[2]
# [1] FALSE
list1$datosNumeros[150]
# [1] 64.92
list1$muestr4[5]
# [1] 70.95

### Crear la lista no nombrada
list2 <- list(muestr4, datosNumeros, DF10)

### Ubicar las indexaciones de la lista no nombrada
list2[[3]][2,3]
# [1] FALSE
list2[[2]][150]
# [1] 64.92
list2[[1]][5]
# [1] 70.95