# Capitulo 3 Lenguaje R

## 3.1 Ejercicios de Introduccion a R

### 3.1.1 Ejercicios Introduccion - Vectores I

• Importar el dataset UKgas. Almacenar la columna del dataset en un vector llamado consumo.de.gas. Preparar un fichero .R con las órdenes necesarias para realizar:
library(rmarkdown)
data("UKgas")
consumo.de.gas <- as.vector(UKgas)
• Acceder a los 10 primeros elementos del vector consumo.de.gas
v1 <- consumo.de.gas[1:10]
v1
##  [1] 160.1 129.7  84.8 120.1 160.1 124.9  84.8 116.9 169.7 140.9
• Acceder a los elementos impares del vector consumo.de.gas
v2 <- consumo.de.gas[c(TRUE, FALSE)]
v2
##  [1]  160.1   84.8  160.1   84.8  169.7   89.7  187.3   92.9  176.1   89.7
## [11]  185.7   99.3  200.1  102.5  204.9  112.1  227.3  115.3  244.9  118.5
## [21]  244.9  188.9  301.0  136.1  317.0  152.1  371.4  158.5  449.9  179.3
## [31]  491.5  177.7  593.9  176.1  584.3  187.3  669.2  216.1  827.7  209.7
## [41]  840.5  217.7  848.5  209.7  925.3  214.5  917.3  224.1  989.4  233.7
## [51] 1087.0  281.8 1163.9  347.4
• Acceder a las posiciones 1,4,7,10,… del vector consumo.de.gas
v3 <- consumo.de.gas[c(TRUE, FALSE, FALSE)]
v3
##  [1] 160.1 120.1  84.8 140.9 187.3 120.1  89.7 155.3 200.1 136.1 112.1 195.3
## [13] 244.9 153.7 188.9 196.9 317.0 336.2 158.5 286.6 491.5 409.8 176.1 395.4
## [25] 669.2 509.1 209.7 414.6 848.5 701.2 214.5 515.5 989.4 730.0 281.8 613.1
• Acceder al vector consumo.de.gas en orden inverso
v4 <- consumo.de.gas[length(consumo.de.gas):1]
v4
##   [1]  782.8  347.4  613.1 1163.9  787.6  281.8  534.7 1087.0  730.0  233.7
##  [11]  477.1  989.4  694.8  224.1  515.5  917.3  683.6  214.5  443.4  925.3
##  [21]  701.2  209.7  437.0  848.5  670.8  217.7  414.6  840.5  542.7  209.7
##  [31]  467.5  827.7  509.1  216.1  421.0  669.2  485.1  187.3  395.4  584.3
##  [41]  483.5  176.1  329.8  593.9  409.8  177.7  321.8  491.5  403.4  179.3
##  [51]  286.6  449.9  355.4  158.5  240.1  371.4  336.2  152.1  230.5  317.0
##  [61]  267.3  136.1  196.9  301.0  142.5  188.9  216.1  244.9  153.7  118.5
##  [71]  214.5  244.9  142.5  115.3  195.3  227.3  140.9  112.1  176.1  204.9
##  [81]  136.1  102.5  161.7  200.1  131.3   99.3  155.3  185.7  123.3   89.7
##  [91]  147.3  176.1  120.1   92.9  144.1  187.3  123.3   89.7  140.9  169.7
## [101]  116.9   84.8  124.9  160.1  120.1   84.8  129.7  160.1
• Acceder a los 50 primeros elementos del vector consumo.de.gas excepto la posición 1, 3 y 5.
v5 <- consumo.de.gas[1:50]
v5 <- v5[-(c(1,3,5))]
v5
##  [1] 129.7 120.1 124.9  84.8 116.9 169.7 140.9  89.7 123.3 187.3 144.1  92.9
## [13] 120.1 176.1 147.3  89.7 123.3 185.7 155.3  99.3 131.3 200.1 161.7 102.5
## [25] 136.1 204.9 176.1 112.1 140.9 227.3 195.3 115.3 142.5 244.9 214.5 118.5
## [37] 153.7 244.9 216.1 188.9 142.5 301.0 196.9 136.1 267.3 317.0 230.5
• Sumarle 1 a los elementos del vector consumo.de.gas (reciclaje)
v6 <- consumo.de.gas+1
v6
##   [1]  161.1  130.7   85.8  121.1  161.1  125.9   85.8  117.9  170.7  141.9
##  [11]   90.7  124.3  188.3  145.1   93.9  121.1  177.1  148.3   90.7  124.3
##  [21]  186.7  156.3  100.3  132.3  201.1  162.7  103.5  137.1  205.9  177.1
##  [31]  113.1  141.9  228.3  196.3  116.3  143.5  245.9  215.5  119.5  154.7
##  [41]  245.9  217.1  189.9  143.5  302.0  197.9  137.1  268.3  318.0  231.5
##  [51]  153.1  337.2  372.4  241.1  159.5  356.4  450.9  287.6  180.3  404.4
##  [61]  492.5  322.8  178.7  410.8  594.9  330.8  177.1  484.5  585.3  396.4
##  [71]  188.3  486.1  670.2  422.0  217.1  510.1  828.7  468.5  210.7  543.7
##  [81]  841.5  415.6  218.7  671.8  849.5  438.0  210.7  702.2  926.3  444.4
##  [91]  215.5  684.6  918.3  516.5  225.1  695.8  990.4  478.1  234.7  731.0
## [101] 1088.0  535.7  282.8  788.6 1164.9  614.1  348.4  783.8
• Sumar los 10 primeros elementos del vector consumo.de.gas con el vector v2=(1,2,3)
# Como son tamaños diferentes, cogeré un vector multiplo del vector v2 y luego seleccionare los 10 elementos requeridos
v2 <- c(1,2,3)
v7 <- consumo.de.gas[1:12]
v7 <- v7+v2
v7 <- v7[1:10]
v7
##  [1] 161.1 131.7  87.8 121.1 162.1 127.9  85.8 118.9 172.7 141.9

### 3.1.2 Ejercicios Funciones

• Programar una función que devuelva dado un vector cuantos números impares tiene. AYUDA: Usar %% para calcular el resto.
n_impares <- function(vector){
sum <- length(which(vector%%2 != 0))
return(sum)
}

v1 <- 1:10
n_impares(v1)
## [1] 5
• Programar una función que calcule el volumen de una esfera dado el radio r de dicha esfera. La ecuacion para hallar el volumen de una esfera es $$V = \frac{4}{3}\pi r^3$$
return(res)
}
## [1] 33.51032
• Programar una función que calcule el volumen de esferas con radio r =1,2,…,20 y devuelva un data.frame con las dos columnas (radio, volumen).
volumenes <- function(vector){
vols <- vol_esfera(vector)
}
v <- 1:20
paged_table(volumenes(v))

### 3.1.3 Manipular Data Frames - Ejercicio 2.1

Importar el dataset HairEyeColor y preparar un fichero .R con los comandos requeridos para lo siguiente:

• Si el dataset importado no es un dataframe convertirlo a dataframe
HairEyeColorDF <- as.data.frame(HairEyeColor)
class(HairEyeColorDF)
## [1] "data.frame"
• Analizar la estructura del dataset, tipo de datos, estructura, clase, etc.
str(HairEyeColorDF)
## 'data.frame':    32 obs. of  4 variables:
##  $Hair: Factor w/ 4 levels "Black","Brown",..: 1 2 3 4 1 2 3 4 1 2 ... ##$ Eye : Factor w/ 4 levels "Brown","Blue",..: 1 1 1 1 2 2 2 2 3 3 ...
##  $Sex : Factor w/ 2 levels "Male","Female": 1 1 1 1 1 1 1 1 1 1 ... ##$ Freq: num  32 53 10 3 11 50 10 30 10 25 ...
• Obtener número de columnas, número de ﬁlas. Guardar en un vector el nombre de las columnas.
dim(HairEyeColorDF)
## [1] 32  4
nrow(HairEyeColorDF)
## [1] 32
ncol(HairEyeColorDF)
## [1] 4
• Cambiar el nombre de la primera columna.
dt2 <- HairEyeColorDF
names(dt2)[1] <- 'Pelo'
paged_table(dt2)
• Averiguar el tipo de datos de la primera columna.
class(dt2[[1]])
## [1] "factor"
• Comando para averiguar si hay valores NA en todo el dataframe, y lo mismo en la columna 1.
as.logical(sum(is.na(HairEyeColorDF)));      #Para todo el dataframe
## [1] FALSE
as.logical(sum(is.na(HairEyeColorDF[, 1]))); # Para la columna 1
## [1] FALSE
• Practicar con el dataset para extraer un conjunto de ﬁlas y/o columnas.
• Guardar cinco primeras ﬁlas en una variable d1 y las cinco últimas en una variable d2 y combinarlas en un nuevo dataframe llamado d12.
d1 <- HairEyeColorDF[1:5,]
d1
##    Hair   Eye  Sex Freq
## 1 Black Brown Male   32
## 2 Brown Brown Male   53
## 3   Red Brown Male   10
## 4 Blond Brown Male    3
## 5 Black  Blue Male   11
d2 <- HairEyeColorDF[(length(HairEyeColorDF[, 1])-4):length(HairEyeColorDF[,1]), ]
d2
##     Hair   Eye    Sex Freq
## 28 Blond Hazel Female    5
## 29 Black Green Female    2
## 30 Brown Green Female   14
## 31   Red Green Female    7
## 32 Blond Green Female    8
d12 <- rbind(d1,d2)
d12
##     Hair   Eye    Sex Freq
## 1  Black Brown   Male   32
## 2  Brown Brown   Male   53
## 3    Red Brown   Male   10
## 4  Blond Brown   Male    3
## 5  Black  Blue   Male   11
## 28 Blond Hazel Female    5
## 29 Black Green Female    2
## 30 Brown Green Female   14
## 31   Red Green Female    7
## 32 Blond Green Female    8
• Utilizar el comando subset para extraer, eliminar, etc. un conjunto de columnas de un data set.
d3 <- subset(HairEyeColorDF, HairEyeColorDF[4] > 5)
paged_table(d3)
• Usar subset para guardar en una variable las ﬁlas de dataset con valor para eye de Blue.
ojos <- subset(HairEyeColorDF, HairEyeColorDF[2] == "Blue")
ojos
##     Hair  Eye    Sex Freq
## 5  Black Blue   Male   11
## 6  Brown Blue   Male   50
## 7    Red Blue   Male   10
## 8  Blond Blue   Male   30
## 21 Black Blue Female    9
## 22 Brown Blue Female   34
## 23   Red Blue Female    7
## 24 Blond Blue Female   64
• Guardar la primera columna en variable d y utilizar los comandos unique, table. ¿Para qué sirven estos comandos?.
d <- HairEyeColorDF[[1]]
d
##  [1] Black Brown Red   Blond Black Brown Red   Blond Black Brown Red   Blond
## [13] Black Brown Red   Blond Black Brown Red   Blond Black Brown Red   Blond
## [25] Black Brown Red   Blond Black Brown Red   Blond
## Levels: Black Brown Red Blond
unique(d)     # Devuelve la estructura sin valores duplicados
## [1] Black Brown Red   Blond
## Levels: Black Brown Red Blond
table(d)      # 'table' utiliza los factores de clasificación cruzada para construir una tabla de contingencia de los recuentos en cada combinación de niveles de factores.
## d
## Black Brown   Red Blond
##     8     8     8     8
• Con la variable d usar colSums, colMeans. Explicar con ejemplos para qué sirven estos comandos.
• Explicar con ejemplos para qué sirven los comandos rowSums, rowMeans.
# No podemos usar esos comandos con la variable d, pues se trata de una estructura unidimensional
# Usare un data frame compuesto por los valores 1:10 para probar las funciones
df <- data.frame(matrix(1:9,3,3))
df
##   X1 X2 X3
## 1  1  4  7
## 2  2  5  8
## 3  3  6  9
colSums(df)   # Realiza la suma de todos los elementos por columnas
## X1 X2 X3
##  6 15 24
colMeans(df)  # Realiza la media de todos los elementos por columnas
## X1 X2 X3
##  2  5  8
rowSums(df)   # Realiza la suma de todos los elementos por filas
## [1] 12 15 18
rowMeans(df)  # Realiza la media de todos los elementos por filas
## [1] 4 5 6

### 3.1.4 Errores comunes - Ejercicio 2.2

• Explica por qué los siguientes comandos dan error o no hacen lo que podría ser previsible con la lectura del comando. Arreglalo.
# usa mtcars de paquete datasets
library(datasets)
data("mtcars")
mtcars[mtcars$cyl = 4, ] # La comparacion se realiza con == mtcars[-1:4, ] # Los indices no estan seleccionados correctamente mtcars[mtcars$cyl <= 5]          # No se han especificado las columnas
mtcars[mtcars$cyl == 4 | 6, ] # Se evalua primero 4|6 por lo que siempre será true (suma lógica) y selecciona todos los valores mtcars[1:20] # No se han especificado las columnas # Errores?? x <- 1:5; x[NA] # Esta transformando todos los valores en NA A continuacion se muestra la correccion de los errores library(datasets) data("mtcars") mtcars[mtcars$cyl == 4, ]                       # Añadimos ==
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
mtcars[1:4, ]                                   # Podemos seleccionar las filas 1:4
##                 mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710     22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
mtcars[-(1:4), ]                                # Podemos eliminar las filas 1:4
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
mtcars[mtcars$cyl <= 5, ] # Añadimos una coma para seleccionar todas las columnas ## mpg cyl disp hp drat wt qsec vs am gear carb ## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 ## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 ## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 ## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 ## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 ## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 ## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 ## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 ## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 ## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 ## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 mtcars[mtcars$cyl == 4 | mtcars$cyl == 6, ] # Separamos las comparaciones y luego realizamos la operacion OR ## mpg cyl disp hp drat wt qsec vs am gear carb ## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 ## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 ## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 ## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 ## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 ## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 ## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 ## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 ## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 ## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 ## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 ## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 ## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 ## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 ## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 ## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 ## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 ## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 mtcars[1:20, ] # Añadimos una coma para seleccionar todas las columnas ## mpg cyl disp hp drat wt qsec vs am gear carb ## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 ## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 ## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 ## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 ## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 ## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 ## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 ## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 ## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 ## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 ## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 ## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 ## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 ## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 ## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 ## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 ## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 ## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 ## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 ## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 x <- 1:5; x[is.na(x)] # Si lo que queremos es consultar los valores nulos usamos is.na ## integer(0) ### 3.1.5 Vectores y Listas - Ejercicio 2.3 Dado la siguiente pareja de vectores mu y nu, realizar una función que haga lo siguiente: Vaya cogiendo los elementos de mu y nu que estén en la misma posición y los reuna en vectores. Todas las parejas se reunirán en una lista y está es la salida de la función. iset <- function(mu,nu){ mi.iset <- mapply(c, mu, nu, SIMPLIFY = FALSE) return(mi.iset) }#end function mu <- c(0.1, 0.3, 1) nu <- c(0.7, 0.5, 0) memb <- iset(mu,nu) str(memb) ## List of 3 ##$ : num [1:2] 0.1 0.7
##  $: num [1:2] 0.3 0.5 ##$ : num [1:2] 1 0

### 3.1.6 Vectores y Listas - Ejercicio 2.4

Implementa una función que reciba una matriz y devuelva la diagonal de la matriz D, la submatriz inferior debajo de la diagonal R y la la submatriz superior encima de la diagonal R.

divido.matriz <- function(M){
return(list(D=diag(M),R=M[upper.tri(M)], L=M[lower.tri(M)]))
}# fin función

matriz <- matrix(1:9, 3, 3)
divido.matriz(matriz)
## $D ## [1] 1 5 9 ## ##$R
## [1] 4 7 8
##
## $L ## [1] 2 3 6 ### 3.1.7 Laboratorio C1 - Ejercicio 1 # 1. Crea un vector v1 con los siguientes 10 valores (3, 12, 6, -5, 0, NA, 15, 1, -10, 7). v1 <- c(3, 12, 6, -5, 0, NA, 15, 1, -10, 7) # 2. Crea un vector v2 con valores de 0 a 10 de 0.1 en 0.1 v2 <- seq(from = 0, to = 10, by = 0.1) # 3. Comando para ver el tipo de datos de v1. class(v1) ## [1] "numeric" # 4. Resta 2 a los elementos pares de v1 (con una sola orden y de forma vectorial). Define dos funciones que realicen esta tarea. v1[c(FALSE,TRUE)]-2 ## [1] 10 -7 NA -1 5 # 5. Calcula la suma y la media de v2. tem Con los vectores v2 y v3 crea un data.frame de nombre mi.df1. sumV2 <- sum(v2) sumV2 ## [1] 505 meanV2 <- mean(v2) meanV2 ## [1] 5 v3 <- sin(v2) mi.df1 <- as.data.frame(cbind(v2,v3)) paged_table(mi.df1) # 6. Cambia el nombre de columnas de data.frame anterior con las etiquetas x y seno(x). names(mi.df1) <- c("x", "seno(x)") # 7. Invierte el orden de los elementos de v2 y lo guardas en v4. v4 <- v2[(length(v2)):1] v4 ## [1] 10.0 9.9 9.8 9.7 9.6 9.5 9.4 9.3 9.2 9.1 9.0 8.9 8.8 8.7 8.6 ## [16] 8.5 8.4 8.3 8.2 8.1 8.0 7.9 7.8 7.7 7.6 7.5 7.4 7.3 7.2 7.1 ## [31] 7.0 6.9 6.8 6.7 6.6 6.5 6.4 6.3 6.2 6.1 6.0 5.9 5.8 5.7 5.6 ## [46] 5.5 5.4 5.3 5.2 5.1 5.0 4.9 4.8 4.7 4.6 4.5 4.4 4.3 4.2 4.1 ## [61] 4.0 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.9 2.8 2.7 2.6 ## [76] 2.5 2.4 2.3 2.2 2.1 2.0 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 ## [91] 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.0 # 8. Guarda en un vector v5 los elementos de v1 que no son negativos ni NA. v5 <- v1[(v1>0) & (!is.na(v1))] v5 ## [1] 3 12 6 15 1 7 # 9. Borra de v1 los elementos negativos. v1 <- v1[v1 > 0] # 10. Calcula la longitud de v1 y mira la estructura del vector. length(v1) ## [1] 7 str(v1) ## num [1:7] 3 12 6 NA 15 1 7 # 11. Elimina v1 del Workspace de R. rm(v1) # 12. Calcula la media de aquellos valores de v2 que sean menores de 1. media <- mean(v2[v2 < 1]) # 13. Elimina de v2 aquellos elementos mayores de 1 y menores de 3. v2 <- v2[(v2 <= 1)|(v2 >= 3)] # 14. Calcula la suma acumulada de los valores de v2. suma <- sum(v2) # 15. De varias formas distintas crea una matriz M1 con los valores de 1 a 25 con 5 filas (almacenados por filas). M1 <- matrix(1:25,5,5,byrow = TRUE) # 1 Forma M1 <- rbind(1:5,6:10,11:15,16:20,21:25) # 2 Forma M1 <- 1:25 # 3 Forma dim(M1) <- c(5,5) M1 <- t(M1) M1 ## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 2 3 4 5 ## [2,] 6 7 8 9 10 ## [3,] 11 12 13 14 15 ## [4,] 16 17 18 19 20 ## [5,] 21 22 23 24 25 # 16. Extrae de la matriz M1 aquellos valores que sean mayores que 10. M1[M1 > 10] ## [1] 11 16 21 12 17 22 13 18 23 14 19 24 15 20 25 # 17. Extrae de la matriz M1 la primera y la última columna y guarda el resultado en matriz M2. M2 <- cbind(M1[,1], M1[,ncol(M1)]) # 18. Calcula el determinante de M1. det(M1) ## [1] 0 # 19. Calcula la inversa de M1. # solve(M1) Su determinante es 0, no se puede calcular # 20. Calcula los autovectores y autovalores de M1. Define una función que dada una matriz devuelvan una lista su radio espectral que se define como el mayor autovalor en módulo y su autovector correspondiente. eigen(M1) ## eigen() decomposition ##$values
## [1]  6.864208e+01+0.000000e+00i -3.642081e+00+0.000000e+00i
## [3] -2.153465e-15+2.015276e-15i -2.153465e-15-2.015276e-15i
## [5]  7.219523e-16+0.000000e+00i
##
## $vectors ## [,1] [,2] [,3] [,4] ## [1,] -0.1079750+0i 0.67495283+0i 0.0381046+0.2345472i 0.0381046-0.2345472i ## [2,] -0.2527750+0i 0.36038970+0i 0.2645195-0.2955559i 0.2645195+0.2955559i ## [3,] -0.3975750+0i 0.04582657+0i -0.1224010-0.0257606i -0.1224010+0.0257606i ## [4,] -0.5423751+0i -0.26873656+0i -0.7011750+0.0000000i -0.7011750+0.0000000i ## [5,] -0.6871751+0i -0.58329969+0i 0.5209519+0.0867693i 0.5209519-0.0867693i ## [,5] ## [1,] -0.11703805+0i ## [2,] -0.22725312+0i ## [3,] 0.82596595+0i ## [4,] -0.50202033+0i ## [5,] 0.02034555+0i f <- function(m){ eigens <- eigen(m) modulos <- unlist(lapply(eigens$values, Mod))
indice <- which.max(modulos)
radEsp <- list(autovalor = (max(modulos[1])), autovector = eigens$vectors[, indice]) return(radEsp) } f(M1) ##$autovalor
## [1] 68.64208
##
## $autovector ## [1] -0.1079750+0i -0.2527750+0i -0.3975750+0i -0.5423751+0i -0.6871751+0i ### 3.1.8 Laboratorio C2 - Ejercicio 2 Primero importa el dataset landdata-states.csv del CV landdata_states <- read.csv("landdata-states.csv") # 1. Calcula el máximo, mínimo y media de la columna Home.Value. maximo <- max(landdata_states$Home.Value)
minimo <- min(landdata_states$Home.Value) media <- mean(landdata_states$Home.Value)

# 2. Elimina la última columna. Elimina la segunda fila del dataset.
landdata_states2 <- landdata_states[, -ncol(landdata_states)]
landdata_states2 <- landdata_states[-2,]

# 3. Explica con ejemplos la diferencia entre usar [] o [[]] para acceder a elementos del data frame. Mira la clase y la estructura de la segunda y tercera columna. Di de que tipo es cada una y su longitud.

# Con [] accedemos a las columnas que indiquemos entre corchetes, pero devuelve un data frame. Si queremos acceder al vector que está dentro del data frame usaremos [[]].
class(landdata_states[[2]])
## [1] "factor"
class(landdata_states[[3]])
## [1] "numeric"
str(landdata_states[[2]])
##  Factor w/ 4 levels "Midwest","N. East",..: 4 4 4 4 4 4 4 4 4 4 ...
str(landdata_states[[3]])
##  num [1:7803] 2010 2010 2010 2010 2008 ...
length(landdata_states[[2]])
## [1] 7803
length(landdata_states[[3]])
## [1] 7803
# 4. De la columna Year cambia todos los años menores del 2000 por NA.
landdata_states$Year[landdata_states$Year < 2000] <- NA

# 5. Cambia - traduciendo el nombre de las columnas del dataset (si alguna columna tiene nombre extraño que no sabemos significado - simplemente coloca primera letra del nombre de inglés y un número).
names(landdata_states) <- c("Estado", "Region", "Fecha", "Valor.Casa", "Estructura.Coste", "Coste.Terreno", "LS1", "Indice.Precio.Casa", "Indice.Precio.Terreno", "Año", "Cuatrimestre")

names(landdata_states)