Capitulo 5 Examen Introduccion a R + DPLYR

5.1 Ejercicio 1

Define la siguiente función \(f1(x) = log(x)+1\)

library(dplyr)
f1 <- function(x){
  return(log(x)+1)
}

Crea en R la siguiente lista:

observacionesA <- c(c(1:35),c(35:3))

nums <- c(35:70)

# Acceso a impares y pares
fila1 <- nums[c(TRUE,FALSE)]
fila2 <- nums[c(FALSE,TRUE)]

# Tambien podria haber hecho un rbind entre las filas y me ahorraba crear la matriz

lista1 <- list(observacionA = observacionesA, observacionB = matrix(c(fila1, fila2),2,18, byrow = TRUE))
lista1
## $observacionA
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
## [51] 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3
## 
## $observacionB
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,]   35   37   39   41   43   45   47   49   51    53    55    57    59    61
## [2,]   36   38   40   42   44   46   48   50   52    54    56    58    60    62
##      [,15] [,16] [,17] [,18]
## [1,]    63    65    67    69
## [2,]    64    66    68    70
str(lista1)
## List of 2
##  $ observacionA: int [1:68] 1 2 3 4 5 6 7 8 9 10 ...
##  $ observacionB: int [1:2, 1:18] 35 36 37 38 39 40 41 42 43 44 ...
  • Usa lapply() para aplicar f1(x) a las (observaciones) de la lista.
  • Calcula la media posteriormente de todas las observaciones de la lista.
  • Convierte los valores obtenidos en un vector y suma los valores de dicho vector.
consulta <- lista1 %>%
  lapply(f1) %>%
  sapply(mean)

# Conversion a vector
vector <- as.vector(consulta)
vector
## [1] 3.699694 4.940506
# suma de elementos
sum(vector)
## [1] 8.6402

5.2 Ejercicio 2

  • Añade columna con el peso en kg (dale de nombre Kg - la columna wg tiene - Weight (1000 lbs) y se sabe que 0,453592 Kg son los Kg. de una libra).

  • Devuelve un dataframe con nombre mtcars1 con las columnas kg, namecar, wt, cyl, mpg (en este orden) ordenado por los que gastan mas (mpg me dice cuantas Miles/(US) gallon), teniendo 4 cilindros.

  • Haz un resumen automáticamente y calcula cuantos coches cumplen las restricciones anteriores y calcula la media del peso en Kg.

  • De mtcars1 obtener el/los 2 nombres de coche primeros (el programa debe seleccionar el/los 2 primero/s - no “a mano”), que gastan menos.

data("mtcars")

# Funcion para convertir en kg
toKG <- function(x){
  return(x*0.453592)
}

tabla <- mtcars
tabla <- mutate(tabla, Kg = toKG(tabla$wt*1000))
# Como mtcars el nombre de sus filas se corresponde con namecar, la añado
names <- rownames(mtcars)
tabla <- mutate(tabla, namecar = names)
mtcars1 <- select(tabla, Kg, namecar, wt, cyl, mpg) %>% arrange(mpg) %>%
  filter(cyl == 4)

# Summary obtiene un resumen de los elementos, incluyendo la media que buscamos 
summary(mtcars1)
##        Kg           namecar                wt             cyl   
##  Min.   : 686.3   Length:11          Min.   :1.513   Min.   :4  
##  1st Qu.: 855.0   Class :character   1st Qu.:1.885   1st Qu.:4  
##  Median : 997.9   Mode  :character   Median :2.200   Median :4  
##  Mean   :1036.8                      Mean   :2.286   Mean   :4  
##  3rd Qu.:1189.5                      3rd Qu.:2.623   3rd Qu.:4  
##  Max.   :1447.0                      Max.   :3.190   Max.   :4  
##       mpg       
##  Min.   :21.40  
##  1st Qu.:22.80  
##  Median :26.00  
##  Mean   :26.66  
##  3rd Qu.:30.40  
##  Max.   :33.90
mean(mtcars1$Kg)
## [1] 1036.788
# Seleccionamos las dos primeras filas
mtcars1[1:2,]$namecar
## [1] "Volvo 142E"    "Toyota Corona"

5.3 Ejercicio 3

Crear la lista espcificada y con un solo comando conseguir el siguiente resultado.

mi_lista1 <- list(c("al1","al2","al3"))
mi_lista1
## [[1]]
## [1] "al1" "al2" "al3"
str(mi_lista1)
## List of 1
##  $ : chr [1:3] "al1" "al2" "al3"
# Append para añadir un elemento a la lista siendo el mismo
mi_lista1 <- append(mi_lista1, mi_lista1)
mi_lista1
## [[1]]
## [1] "al1" "al2" "al3"
## 
## [[2]]
## [1] "al1" "al2" "al3"