A.2 Cap. 3: Estructuras de datos
- Crea una variable llamada
datosNumerosque 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- Utilizando la función
sample(), crea una variable llamadamuestr4que contenga el muestreo de 10 elementos (con repetición) del objetodatosNumeros. Utilizaset.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- Redondea todos los elementos del vector
datosNumerosa dos decimales, coerciona el objeto a texto, y guarda el resultado en el ambiente con el nombrecoer.
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í.
- Utiliza
coerpara 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.00Como 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.
- Crea el vector
miPaisque contenga únicamente el nombre de tu país de residencia. CoercemiPaishacia 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] NALa 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.
- Crea una data frame llamada
DF10, cuyo contenido sea: una columna numérica, otra de texto, y otra lógica, todas de 5 elementos. CoerceDF10hacia 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
TRUEse convierten en 1, y losFALSEen 0.
- 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 objetoDF10.
- Elemento 150 del objetodatosNumeros.
- El elemento 5 del objetomuestr4.
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