1 Estructuras de datos en R

1.1 Vectores y data.frames

1.1.1 Desafío 3

Construir un data.frame a partir de un conjunto de vectores y analizar descriptivamente el conjunto de datos.

Crear un vector caracter de 10 nombres diferentes

nombres <- c("Juan", "Pedro", "Luis", "Aracely", "Rubén", "Linda", "Brenda", "Lucy", "Liliana", "Aracely")

Crear un vector numérico de 10 edades diferentes o repetidos

edades <- c(24, 34, 51, 32, 45, 30, 43, 54, 54, 23)

Crear un vector de caracter 10 géneros entre M o F Masculino o Femenino

generos <- c('M', "M", "M", "F", "M", "F", "F", "F", "F", "F")

Crear un vector de 10 elementos en donde se almacene en un tipo de dato lógico (TRUE | FALSE) el estado de si una persona está feliz o no está feliz .

feliz <- c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE)

Crear un vector de 10 elementos de tipo real para conocer la estatura de una persona

estaturas <- c(1.65, 1.70, 1.54, 1.72, 1.70, 1.80, 1.90, 1.75, 1.72, 1.65)

Crear un vector de 10 elementos para saber el peso e en kgs. de una persona

pesos <- c(80, 70, 75, 60, 65, 70, 86, 90, 50, 76)

Crear un vector de 10 elementos para identificar la zona geográfica den donde vive una persona de entre (CENTRO, SUR, NORTE,ORIENTE,PONIENTE)

zonas <- c("CENTRO", "SUR", "SUR", "CENTRO", "ORIENTE", "PONIENTE", "CENTRO", "SUR", "PONIENTE", "CENTRO")

1.1.2 Data.frame datos

Construir un data frame llamado datos partir de los vectores

datos <- data.frame(nombres, edades, generos, feliz, estaturas, pesos, zonas )
datos
##    nombres edades generos feliz estaturas pesos    zonas
## 1     Juan     24       M  TRUE      1.65    80   CENTRO
## 2    Pedro     34       M FALSE      1.70    70      SUR
## 3     Luis     51       M  TRUE      1.54    75      SUR
## 4  Aracely     32       F  TRUE      1.72    60   CENTRO
## 5    Rubén     45       M FALSE      1.70    65  ORIENTE
## 6    Linda     30       F  TRUE      1.80    70 PONIENTE
## 7   Brenda     43       F FALSE      1.90    86   CENTRO
## 8     Lucy     54       F  TRUE      1.75    90      SUR
## 9  Liliana     54       F FALSE      1.72    50 PONIENTE
## 10 Aracely     23       F  TRUE      1.65    76   CENTRO

1.1.2.1 nrow() y length()

Determinar el número de observaciones con nrow() y length()

nrow cuenta el numero de registros u observaciones de un data.frame.

length() cuenta los elementos de un vector.

nrow(datos)
## [1] 10
length(edades)
## [1] 10

1.1.2.2 which() which.max() which.min(), subset()

which() evalúa la expresión de objeto (vector) y determina el resultado con la posición de los elementos que cumplan con la condición de la expresión

which(edades > 25)
## [1] 2 3 4 5 6 7 8 9

Conocer las edades que son por encima de 25

edades[which(edades > 25)]
## [1] 34 51 32 45 30 43 54 54

Identificar los nombres de las personas que tienen edad mayor a 25

datos$nombres[which(datos$edades > 25)]
## [1] "Pedro"   "Luis"    "Aracely" "Rubén"   "Linda"   "Brenda"  "Lucy"   
## [8] "Liliana"

1.1.2.3 which.max() which.min()

Accediendo a valores de columnas y renglones

datos[1,] # Renglon, Columna
##   nombres edades generos feliz estaturas pesos  zonas
## 1    Juan     24       M  TRUE      1.65    80 CENTRO
datos[,1:2] # Renglon, Columna
##    nombres edades
## 1     Juan     24
## 2    Pedro     34
## 3     Luis     51
## 4  Aracely     32
## 5    Rubén     45
## 6    Linda     30
## 7   Brenda     43
## 8     Lucy     54
## 9  Liliana     54
## 10 Aracely     23
datos[2:4,1]
## [1] "Pedro"   "Luis"    "Aracely"
datos[2:4,c(1,4,6)]
##   nombres feliz pesos
## 2   Pedro FALSE    70
## 3    Luis  TRUE    75
## 4 Aracely  TRUE    60
datos$nombres
##  [1] "Juan"    "Pedro"   "Luis"    "Aracely" "Rubén"   "Linda"   "Brenda" 
##  [8] "Lucy"    "Liliana" "Aracely"
datos$edades[4:3]
## [1] 32 51

Devuelve la posición de los valores máximos y mínimos de un vector

edades[which.max(edades)]
## [1] 54
edades[which.min(edades)]
## [1] 23
datos[which.max(datos$edades), ]
##   nombres edades generos feliz estaturas pesos zonas
## 8    Lucy     54       F  TRUE      1.75    90   SUR

1.1.3 subset()

Filtrar de un data frame un subconjunto de registros a partir de una expresión

Registros con edades mayores a 30

mayores30 <- subset(datos, edades >30)
mayores30
##   nombres edades generos feliz estaturas pesos    zonas
## 2   Pedro     34       M FALSE      1.70    70      SUR
## 3    Luis     51       M  TRUE      1.54    75      SUR
## 4 Aracely     32       F  TRUE      1.72    60   CENTRO
## 5   Rubén     45       M FALSE      1.70    65  ORIENTE
## 7  Brenda     43       F FALSE      1.90    86   CENTRO
## 8    Lucy     54       F  TRUE      1.75    90      SUR
## 9 Liliana     54       F FALSE      1.72    50 PONIENTE

Registros con edades entre 30 y 40. Mayor que 30 y menor o igual que 40.

subset(datos, edades >30 & edades <=40)
##   nombres edades generos feliz estaturas pesos  zonas
## 2   Pedro     34       M FALSE      1.70    70    SUR
## 4 Aracely     32       F  TRUE      1.72    60 CENTRO

1.1.3.1 names(), colnames(), rownames()

names() identifica o permite poner o modificar los nombres de columnas de un data frame.

colnames() hace los mismos que names()

rownames() identifica o poner los nobres de registros.

Reconocer las funciomnes names() colnames() rownames()

names(datos)
## [1] "nombres"   "edades"    "generos"   "feliz"     "estaturas" "pesos"    
## [7] "zonas"
names(datos)[3]
## [1] "generos"
colnames(datos)[4] <- c("felices")

names(datos)
## [1] "nombres"   "edades"    "generos"   "felices"   "estaturas" "pesos"    
## [7] "zonas"

1.1.4 Interpretar el desafio

  • ¿Cuáles y cuántos son del género femenino y del género masculino?

  • ¿Cuáles y cuántas personas están entre 20 y 25 años?

  • ¿Cuáles y cuántas personas viven en zona CENTRO ?

  • ¿Cuál es el valor medio y la dispersión de la variable edad de las personas?

  • ¿Cuál es el valor medio y la dispersión de la variable altura de las personas?

  • ¿Cuál es el valor medio y la dispersión de la variable peso de las personas?