A.2 Cap. 3: Estructuras de datos
- Crea una variable llamada
datosNumeros
que contenga 200 números (decimales) entre el 20 y 80.
Solución:
<- seq(20, 80, length=200)
datosNumeros
### 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 llamadamuestr4
que 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)
<- sample(datosNumeros, 10, replace = TRUE)
muestr4
### 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
datosNumeros
a dos decimales, coerciona el objeto a texto, y guarda el resultado en el ambiente con el nombrecoer
.
Solución:
### Redondear datosNumeros
<- round(datosNumeros, 2)
r
### Coercer hacia texto
<- as.character(r)
coer
### 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
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.
- Crea el vector
miPais
que contenga únicamente el nombre de tu país de residencia. CoercemiPais
hacia vector numérico. ¿Notas la advertencia?
Solución:
### Crear la variable
<- "Peru"
miPais
### 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
.
- Crea una data frame llamada
DF10
, cuyo contenido sea: una columna numérica, otra de texto, y otra lógica, todas de 5 elementos. CoerceDF10
hacia matriz. ¿Notas algo particular en los elementos de la matriz?
Solución:
### Crear la variable
<- data.frame(
DF10 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 losFALSE
en 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
<- dplyr::lst(muestr4, datosNumeros, DF10)
list1
### Ubicar las indexaciones de la lista nombrada
$DF10$COL3[2]
list1# [1] FALSE
$datosNumeros[150]
list1# [1] 64.92
$muestr4[5]
list1# [1] 70.95
### Crear la lista no nombrada
<- list(muestr4, datosNumeros, DF10)
list2
### Ubicar las indexaciones de la lista no nombrada
3]][2,3]
list2[[# [1] FALSE
2]][150]
list2[[# [1] 64.92
1]][5]
list2[[# [1] 70.95