Capítulo 6 Tipos de datos II: datos estructurados

Ya sabemos un poco la gramática y ortografía de nuestro lenguaje, y algunas de las funcionalidades básicas de nuestro «Word». Vamos a aprender cómo escribir la mejor trama para la novela: hablemos de estructuras de datos.

6.1 Matrices

Hasta ahora hemos visto solo datos en una dimensión: una variable, que tiene \(n\) valores numéricos, \(n\) valores lógicos o \(n\) valores de tipo texto. Una sola variable (de \(n\) elementos).

c(1, 4, NA, -2, 0)
## [1]  1  4 NA -2  0
c("a", NA, "b", "c")
## [1] "a" NA  "b" "c"
c(TRUE, TRUE, FALSE, TRUE)
## [1]  TRUE  TRUE FALSE  TRUE

Pero cuando analizamos datos solemos tener varias variables distintas, por ejemplo, la estatura y el peso de una persona. Cuando tenemos distintas variables numéricas de IGUAL longitud, un formato de dato muy habitual es lo que conocemos como matrices: una «tabla» de números, con filas y columnas.

Vamos a empezar con una matriz sencilla: guardamos las estaturas y pesos de 5 personas.

estaturas <- c(150, 160, 170, 180, 190)
pesos <- c(60, 70, 80, 90, 100)

Hasta ahora, cada variable la hemos definido por separado, pero ahora vamos a juntarlas: vamos a crear nuestro primer conjunto de datos juntado todas ellas en una matriz, un conjunto de números organizado en 2 columnas (una por variable) y 5 filas o registros (una por persona). Para ello usaremos la función cbind(), que nos concatena vectores de igual longitud en formato columna.

datos_matriz <- cbind(estaturas, pesos) # Construimos la matriz por columnas
datos_matriz
##      estaturas pesos
## [1,]       150    60
## [2,]       160    70
## [3,]       170    80
## [4,]       180    90
## [5,]       190   100

Para practicar vamos a definir otro ejemplo con las edades, teléfonos y códigos postales de una serie de individuos.

edades <- c(14, 24, 56, 31, 20, 87, 73) # vector numérico de longitud 7
tlf <- c(NA, 683839390, 621539732, 618211286, NA, 914727164, NA)
cp <- c(33007, 28019, 37005, 18003, 33091, 25073, 17140)

# Construimos la matriz por columnas
datos_matriz <- cbind(edades, tlf, cp) 
datos_matriz
##      edades       tlf    cp
## [1,]     14        NA 33007
## [2,]     24 683839390 28019
## [3,]     56 621539732 37005
## [4,]     31 618211286 18003
## [5,]     20        NA 33091
## [6,]     87 914727164 25073
## [7,]     73        NA 17140

Lo que tenemos es una columna por variable y una fila por registro. También podemos construir la matriz por filas con el comando rbind(), que nos permite añadir filas a una matriz o construirla desde cero (aunque lo habitual es tener cada variable en una columna).

datos_matriz_filas <- rbind(edades, tlf, cp) # Construimos la matriz por filas
datos_matriz_filas
##         [,1]      [,2]      [,3]      [,4]  [,5]      [,6]  [,7]
## edades    14        24        56        31    20        87    73
## tlf       NA 683839390 621539732 618211286    NA 914727164    NA
## cp     33007     28019     37005     18003 33091     25073 17140
# Añadimos una fila
rbind(datos_matriz_filas, c(27, 620125780, 28051))
##         [,1]      [,2]      [,3]      [,4]      [,5]      [,6]  [,7]
## edades    14        24        56        31        20        87    73
## tlf       NA 683839390 621539732 618211286        NA 914727164    NA
## cp     33007     28019     37005     18003     33091     25073 17140
##           27 620125780     28051        27 620125780     28051    27

Como ves, ahora nuestros datos están tabulados, tienen dos dimensiones. ¿Cómo saber las dimensiones que tiene una matriz? Prueba a ejecutar la función dim().

dim(datos_matriz)
## [1] 7 3
dim(datos_matriz_filas)
## [1] 3 7

Fíjate que dim() devuelve un vector de 2 elementos, por lo que para acceder al número de filas deberemos ejecutar dim(x)[1] (y dim(x)[2] para el número de columnas).

dim(datos_matriz)[1]
## [1] 7
dim(datos_matriz)[2]
## [1] 3

También tenemos a nuestra disposición las funciones nrow() y ncol(), que nos devuelven directamente el número de filas y columnas.

nrow(datos_matriz)
## [1] 7
ncol(datos_matriz)
## [1] 3

Bien, ya sabemos definir una matriz a partir de variables sueltas. Igual que a veces es útil generar un vector de elementos repetidos, también podemos definir una matriz de números repetidos (por ejemplo, de ceros), con la función matrix(), indicándole el número de filas y columnas.

matrix(0, nrow = 5, ncol = 3) # 5 filas, 3 columnas, todo 0's
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
## [3,]    0    0    0
## [4,]    0    0    0
## [5,]    0    0    0

También podemos definir una matriz a partir de un vector numérico, reorganizando los valores en forma de matriz (con una dimensión tal que filas * columnas = longitud del vector), sabiendo que los elementos se van colocando por columnas (primeros valores en la primera columna, de arriba a abajo).

z <- matrix(1:15, ncol = 5) # Matriz con el vector 1:5 con 5 columnas (ergo 3 filas)
z
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    4    7   10   13
## [2,]    2    5    8   11   14
## [3,]    3    6    9   12   15
class(z) # Clase de la variable
## [1] "matrix"

 

Dada una matriz también podemos darle vuelta (lo que se conoce como matriz transpuesta, donde filas pasan a ser columnas y viceversa) con la función t().

datos_matriz
##      edades       tlf    cp
## [1,]     14        NA 33007
## [2,]     24 683839390 28019
## [3,]     56 621539732 37005
## [4,]     31 618211286 18003
## [5,]     20        NA 33091
## [6,]     87 914727164 25073
## [7,]     73        NA 17140
t(datos_matriz) # Matriz transpuesta
##         [,1]      [,2]      [,3]      [,4]  [,5]      [,6]  [,7]
## edades    14        24        56        31    20        87    73
## tlf       NA 683839390 621539732 618211286    NA 914727164    NA
## cp     33007     28019     37005     18003 33091     25073 17140

Con las matrices sucede como con los vectores: cuando aplicamos una operación aritmética, se la estamos aplicando elemento a elemento, por ejemplo, dividir entre 5.

datos_matriz / 5
##      edades       tlf     cp
## [1,]    2.8        NA 6601.4
## [2,]    4.8 136767878 5603.8
## [3,]   11.2 124307946 7401.0
## [4,]    6.2 123642257 3600.6
## [5,]    4.0        NA 6618.2
## [6,]   17.4 182945433 5014.6
## [7,]   14.6        NA 3428.0

6.2 Apply vs bucles

Si eres un programador avezado te estarás preguntando: ¿no se usan apenas los bucles en R? Existir existen, pero la razón por la que no usaremos apenas bucles, e intentaremos evitarlos lo máximo posible, es porque en R son muy ineficientes en tiempo de ejecución. Vamos a poner un ejemplo. Supongamos que queremos calcular la suma de cada fila (es decir, 7 valores). Con bucles sería así.

# Creamos la matriz
estaturas <- c(150, 160, 170, 180, 190)
pesos <- c(60, 70, 80, 90, 100)
x <- cbind(estaturas, pesos)

# Bucle
suma <- rep(0, dim(x)[1]) 
for (i in 1:dim(x)[1]) { # Bucle recorriendo filas

  suma[i] <- sum(x[i, ], na.rm = TRUE) # Suma de la fila i
    
}
suma
## [1] 210 230 250 270 290

En el código anterior puedes ver como para acceder a la fila i-ésima de la matriz se usa el operador [i, ] (dejando libre el índice de la columna), mientras que para acceder a la columna j-ésima de la matriz se usaría el operador [, j]. Para acceder al elemento (i, j) se usa el operador [i, j].

La pregunta es: ¿no hay una forma más eficiente de hacerlo? La respuesta: sí. La función apply() nos permite ejecutar una función por filas o por columnas.

# Suma por filas (MARGIN = 1)
suma_por_filas <- apply(x, MARGIN = 1, FUN = "sum")
suma_por_filas 
## [1] 210 230 250 270 290
# Una función cualquiera por filas
operacion_por_filas <- apply(x, MARGIN = 1, FUN = function(x) { sum(sqrt(2) - 2) })
operacion_por_filas
## [1] -0.5857864 -0.5857864 -0.5857864 -0.5857864 -0.5857864
# Suma por columnas (MARGIN = 2)
suma_por_cols <- apply(x, MARGIN = 2, FUN = "sum")
suma_por_cols
## estaturas     pesos 
##       850       400

Como puedes observar, necesitas tres argmentos y otros opcionales: la matriz, el índice por el que operar (MARGIN = 1 por filas, MARGIN = 2 por columnas) y la función a aplicar, amén de otros argumentos extras que pudiera necesitar la función.

Veamos qué es más eficiente con el paquete microbenchmark, que nos permite comparar el tiempo de dos conjuntos de órdenes.

library(microbenchmark)

# Comparamos tiempos de ejecución de ambas formas, y lo
# repetimos 100 veces para sacar tiempos medios
microbenchmark(
  # órdenes 1
  for (i in 1:dim(x)[1]) {
    
    suma_por_filas[i] <- sum(x[i, ]) 
    
  },
  # órdenes 2
  apply(x, MARGIN = 1, FUN = "sum"), times = 500) 
## Unit: microseconds
##                                                             expr      min
##  for (i in 1:dim(x)[1]) {     suma_por_filas[i] <- sum(x[i, ]) } 1653.313
##                                apply(x, MARGIN = 1, FUN = "sum")   17.459
##        lq       mean    median       uq      max neval cld
##  1715.028 1917.76663 1798.4445 1970.686 5961.567   500   b
##    22.672   37.70646   32.5285   37.650 2958.184   500  a

¡El bucle nos tarda 40-80 veces más que el apply!

 

6.3 Tablas: data.frames

Además del nombre de las columnas (heredado de los nombres de las variables con las que hemos construido las columnas), podemos poner nombre a los registros, por ejemplo, el nombre de las personas a las que pertenece cada dato, definiendo una nueva variable con los nombres y concatenándola.

nombres <- c("Sonia", "Carla", "Pepito", "Carlos", "Lara", "Sandra", "Javi")
cbind(nombres, datos_matriz)
##      nombres  edades tlf         cp     
## [1,] "Sonia"  "14"   NA          "33007"
## [2,] "Carla"  "24"   "683839390" "28019"
## [3,] "Pepito" "56"   "621539732" "37005"
## [4,] "Carlos" "31"   "618211286" "18003"
## [5,] "Lara"   "20"   NA          "33091"
## [6,] "Sandra" "87"   "914727164" "25073"
## [7,] "Javi"   "73"   NA          "17140"

¿Has visto lo que ha sucedido?

Como una matriz SOLO puede tener un tipo de dato, al añadir una variable de tipo texto, ha convertido los números también a texto poniéndole comillas: hemos roto la integridad de nuestro dato. Una forma de añadir nombre a los registros, sin incluirlo como variable, es usando la función row.names().

row.names(datos_matriz) <- c("Sonia", "Carla", "Pepito", "Carlos", "Lara", "Sandra", "Javi")
datos_matriz
##        edades       tlf    cp
## Sonia      14        NA 33007
## Carla      24 683839390 28019
## Pepito     56 621539732 37005
## Carlos     31 618211286 18003
## Lara       20        NA 33091
## Sandra     87 914727164 25073
## Javi       73        NA 17140

 

¿Qué sucede si realmente queremos añadir variables cuyos tipos sean distintos (¡ojo, pero con la misma longitud!)?

Vamos a crear nuevas variables de texto nombres y apellidos, un valor lógico casado, valores numéricos edades, cp y tlf, y una fecha fecha_creacion (fecha de entrada en el sistema) para cada persona.

# Nombres
nombres <- c("Sonia", "Carla", "Pepito", "Carlos", "Lara", "Sandra", "Javi")

# Apellidos
apellidos <- c(NA, "González", "Fernández", "Martínez", "Liébana", "García", "Ortiz")

# Código postal
cp <- c(28019, 28001, 34005, 18410, 33007, 34500, 28017)

# Edades
edades <- c(45, 67, NA, 31, 27, 19, 50)

# Estado civil (no lo sabemos de una persona)
casado <- c(TRUE, FALSE, FALSE, NA, TRUE, FALSE, FALSE)

# Teléfono
tlf <- c(618910564, 914718475, 934567891, 620176565, NA, NA, 688921344)

# Fecha de creación (fecha en el que esa persona entra en el sistema)
# lo convertimos a tipo fecha
fecha_creacion <-
  as.Date(c("2021-03-04", "2020-10-12", "1990-04-05",
            "2019-09-10", "2017-03-21", "2020-07-07",
            "2000-01-28"))

Seguimos teniendo 7 registros, uno por persona pero ahora tenemos un popurrí de variables, de la misma longitud pero de tipos distintos:

  • (edades, tlf, cp) son variables numéricas.
  • (nombres, apellidos) son variables de texto.
  • casado es una variable lógica.
  • fecha_creacion de tipo fecha.

¿Qué sucedería si yo intento mezclar todo en una matriz?

# Juntamos todo en una matriz (juntamos por columnas)
x <- cbind(nombres, apellidos, edades, tlf, cp, casado, fecha_creacion)
x
##      nombres  apellidos   edades tlf         cp      casado  fecha_creacion
## [1,] "Sonia"  NA          "45"   "618910564" "28019" "TRUE"  "18690"       
## [2,] "Carla"  "González"  "67"   "914718475" "28001" "FALSE" "18547"       
## [3,] "Pepito" "Fernández" NA     "934567891" "34005" "FALSE" "7399"        
## [4,] "Carlos" "Martínez"  "31"   "620176565" "18410" NA      "18149"       
## [5,] "Lara"   "Liébana"   "27"   NA          "33007" "TRUE"  "17246"       
## [6,] "Sandra" "García"    "19"   NA          "34500" "FALSE" "18450"       
## [7,] "Javi"   "Ortiz"     "50"   "688921344" "28017" "FALSE" "10984"

Efectivamente: como en una matriz solo puede haber datos de un tipo, los números los convierte a texto, las variables lógicas las convierte a texto (TRUE es un valor lógico, "TRUE" es un texto, como "Pepito", sin significado lógico de verdadero/falso) y las fechas las ha convertido a texto (aunque las veas igual, ya no son de tipo de fecha, son texto y no podemos operar con ellas).

# Días entre la primera y el segundo elemento de fecha de creación
fecha_creacion[1] - fecha_creacion[2]
## Time difference of 143 days
# Días entre primera y segunda fecha de creación pero tomándolo de nuestra matriz (columna 7, fila 1 y 2)
x[1, 7] - x[2, 7]
## Error in x[1, 7] - x[2, 7]: argumento no-numérico para operador binario

 

He aquí LA PREGUNTA

¿Cómo juntar variables de distinto tipo, sin cambiar su naturaleza, como cuando juntamos datos en una tabla de excel?

El formato de tabla de datos en R que vamos a empezar a usar se llama data.frame: una colección de variables de igual longitud pero cada una de un tipo distinto. Para crear un objeto de este tipo basta con usar la función data.frame(), pasándole como argumentos (separados por comas) las variables que queremos reunir, indicando en texto el nombre de las columnas.

# Creamos nuestro primer data.frame
tabla <- data.frame("Nombre" = nombres, "Apellido" = apellidos,
                    "Edad" = edades, "Teléfono" = tlf,
                    "Código Postal" = cp, "Casado" = casado,
                    "Fecha_de_creación" = fecha_creacion)
tabla
##   Nombre  Apellido Edad  Teléfono Código.Postal Casado Fecha_de_creación
## 1  Sonia      <NA>   45 618910564         28019   TRUE        2021-03-04
## 2  Carla  González   67 914718475         28001  FALSE        2020-10-12
## 3 Pepito Fernández   NA 934567891         34005  FALSE        1990-04-05
## 4 Carlos  Martínez   31 620176565         18410     NA        2019-09-10
## 5   Lara   Liébana   27        NA         33007   TRUE        2017-03-21
## 6 Sandra    García   19        NA         34500  FALSE        2020-07-07
## 7   Javi     Ortiz   50 688921344         28017  FALSE        2000-01-28

¡TENEMOS NUESTRO PRIMER CONJUNTO DE DATOS!

Puedes visualizarlo escribiendo su nombre en consola o con la función View()

View(tabla)

6.3.1 Selección de columnas y filas

Si tenemos un data.frame ya creado y queremos añadir una columna es tan simple como usar la función data.frame() que ya hemos visto para concatenar la columna.

# Añadimos una nueva columna con nº de hermanos/as
hermanos <- c(0, 0, 1, 5, 2, 3, 0)
tabla <- data.frame(tabla, hermanos)
tabla
##   Nombre  Apellido Edad  Teléfono Código.Postal Casado Fecha_de_creación
## 1  Sonia      <NA>   45 618910564         28019   TRUE        2021-03-04
## 2  Carla  González   67 914718475         28001  FALSE        2020-10-12
## 3 Pepito Fernández   NA 934567891         34005  FALSE        1990-04-05
## 4 Carlos  Martínez   31 620176565         18410     NA        2019-09-10
## 5   Lara   Liébana   27        NA         33007   TRUE        2017-03-21
## 6 Sandra    García   19        NA         34500  FALSE        2020-07-07
## 7   Javi     Ortiz   50 688921344         28017  FALSE        2000-01-28
##   hermanos
## 1        0
## 2        0
## 3        1
## 4        5
## 5        2
## 6        3
## 7        0

Si queremos acceder a una columna, fila o elemento en concreto, los data.frame tienen las mismas ventajas que una matriz, así basta con usar los mismos operadores.

# Accedemos a la tercera columna
tabla[, 3]
## [1] 45 67 NA 31 27 19 50
# Accedemos a la quinta fila
tabla[5, ]
##   Nombre Apellido Edad Teléfono Código.Postal Casado Fecha_de_creación hermanos
## 5   Lara  Liébana   27       NA         33007   TRUE        2017-03-21        2
# Accedemos a la tercera variable del quinto registro
tabla[5, 3]
## [1] 27

Un data.frame no solo tiene las ventajas de una matriz si no que también tiene las ventajas de una tabla de datos. Por ejemplo, podemos aceder a las variables por el índice de columna que ocupan pero también acceder a las columnas por su nombre, poniendo el nombre de la tabla, el símbolo $ y con el tabulador nos aparecerá un menú de columnas a elegir.

Menú desplegable de variables (columnas) de un data.frame.

Imagen/gráfica 6.1: Menú desplegable de variables (columnas) de un data.frame.

Además del conjunto de datos tabla que ya tenemos, vamos a instalar (sino lo hemos hecho nunca en este ordenador) un paquete muy útil en R llamado {datasets}. Los paquetes que vayamos necesitando los instalaremos y llamaremos al inicio del código principal.

# Paquetes necesarios
# install.packages("datasets") # Descomentar si nunca se ha instalado
library(datasets)

Amén de nuestro conjunto de datos tabla en nuestro panel de entorno, si escribimos datasets:: y pulsamos tabulador, se nos abre un desplegable con distintos conjuntos de datos para ser usados: el paquete datasets nos proporciona data.frames de prueba para que podamos usarlos en nuestros códigos según vamos aprendiendo.

Una de las ventajas de los data.frame es que podemos visualizarlos como si fuera una tabla de Excel dentro de nuestro R con la función View(). Vamos a visualizar no solo el conjunto de datos tabla sino también el conjunto iris del paquete datasets: los data.frame nos permiten trabajar con ellos como bases de datos o como matrices, con las ventajas de ambos.

View(iris)
View(tabla)
Menú desplegable con los data.frame de prueba en datasets

Imagen/gráfica 6.2: Menú desplegable con los data.frame de prueba en datasets

 

En el caso de los data.frame tenemos además a nuestro disposición una herramienta muy potente: la función subset() Dicha función nos va a permitir seleccionar filas y columnas a la vez, tomando de entrada los siguientes argumentos

  • x: una tabla de entrada, un data.frame de entrada.
  • subset: la condición lógica que queramos usar para seleccionar registros (filas).
  • select: un vector que contenga el nombre de las columnas que queremos seleccionar (a lo mejor solo queremos filtrar por filas pero quizás también por columnas).

Por ejemplo, vamos a seleccionar solo los nombres y apellidos de aquellas personas mayores de edad de nuestro conjunto de datos tabla, y del conjunto iris vamos a extraer todos los registros en los que el largo del sépalo es mayor que 7.1, seleccionando solo las columnas de longitud de sépalo y la especie de la planta.

subset(tabla, subset = Edad > 18, select = c("Nombre", "Apellido"))
##   Nombre Apellido
## 1  Sonia     <NA>
## 2  Carla González
## 4 Carlos Martínez
## 5   Lara  Liébana
## 6 Sandra   García
## 7   Javi    Ortiz
subset(iris, subset = Sepal.Length > 7.1, select = c("Sepal.Length", "Species"))
##     Sepal.Length   Species
## 106          7.6 virginica
## 108          7.3 virginica
## 110          7.2 virginica
## 118          7.7 virginica
## 119          7.7 virginica
## 123          7.7 virginica
## 126          7.2 virginica
## 130          7.2 virginica
## 131          7.4 virginica
## 132          7.9 virginica
## 136          7.7 virginica

6.4 Consejos

CONSEJOS

 

Acceder a las funciones de los paquetes

A veces puede que no queramos cargar todo un paquete sino solo una función del mismo, para lo que es suficiente nombre_paquete::nombre_funcion. Recuerda que instalar un paquete es cómo comprar un libro, cargar el paquete con library() es cómo traer el libro comprado de la estantería a tu mesa, y usar solo una función con nombre_paquete::nombre_funcion es cómo pedirle a alguien que te arranque solo una página y te la traiga a la mesa.

 

CONSEJO: nombre de variables

La función names() no solo sirve para consultar los nombres de las variables de un data.frame sino también para cambiarlos a nuestro gusto.

# Consultamos nombres
names(tabla)
## [1] "Nombre"            "Apellido"          "Edad"             
## [4] "Teléfono"          "Código.Postal"     "Casado"           
## [7] "Fecha_de_creación" "hermanos"
# Cambiamos nombres
names(tabla) <- c("nombre_persona", "apellido_persona", "edad", "tlf",
                  "cp", "casado", "f_creacion")
tabla
##   nombre_persona apellido_persona edad       tlf    cp casado f_creacion NA
## 1          Sonia             <NA>   45 618910564 28019   TRUE 2021-03-04  0
## 2          Carla         González   67 914718475 28001  FALSE 2020-10-12  0
## 3         Pepito        Fernández   NA 934567891 34005  FALSE 1990-04-05  1
## 4         Carlos         Martínez   31 620176565 18410     NA 2019-09-10  5
## 5           Lara          Liébana   27        NA 33007   TRUE 2017-03-21  2
## 6         Sandra           García   19        NA 34500  FALSE 2020-07-07  3
## 7           Javi            Ortiz   50 688921344 28017  FALSE 2000-01-28  0

6.5 📝 Ejercicios

(haz click en las flechas para ver soluciones)

Ejercicio 1: define una matriz x de ceros de 3 filas y 7 columnas. Tras ello suma un 1 a cada número de la matriz y divide el resultado entre 5

  • Solución:
# Matriz
x <- matrix(0, nrow = 3, ncol = 7)
x
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,]    0    0    0    0    0    0    0
## [2,]    0    0    0    0    0    0    0
## [3,]    0    0    0    0    0    0    0
(x + 1) / 5
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,]  0.2  0.2  0.2  0.2  0.2  0.2  0.2
## [2,]  0.2  0.2  0.2  0.2  0.2  0.2  0.2
## [3,]  0.2  0.2  0.2  0.2  0.2  0.2  0.2

 

Ejercicio 2: tras definir la matriz x calcula su transpuesta y obtén sus dimensiones

  • Solución:
# Transpuesta
t(x)
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
## [3,]    0    0    0
## [4,]    0    0    0
## [5,]    0    0    0
## [6,]    0    0    0
## [7,]    0    0    0
# Dimensiones transpuesta: pasa de ser 3x7 a 7x3
dim(t(x))
## [1] 7 3
ncol(t(x)) # número de columnas de la transpuesta
## [1] 3
nrow(t(x)) # número de filas de la transpuesta
## [1] 7

 

Ejercicio 3: calcula la suma de cada fila de la matriz matrix(1:12, nrow = 4) usando un bucle. Haz lo mismo evitando usar bucles.

  • Solución:
# Matriz
matriz <- matrix(1:12, nrow = 4)

# Con bucle (recorremos sus filas)
suma <- rep(0, nrow(matriz)) # Definimos un vector de 0's con tantos elementos como filas, donde iremos metiendo los valores de la suma
for (i in 1:nrow(matriz)) {
  
  suma[i] <- sum(matriz[i, ]) # Sumamos la fila i
}
suma
## [1] 15 18 21 24
# Sin bucle (MARGIN = 1 ya que es una operación por filas)
suma <- apply(matriz, MARGIN = 1, FUN = "sum")
suma
## [1] 15 18 21 24

 

Ejercicio 4: con la matriz matrix(1:12, nrow = 4) anterior, calcula la media de todos los elementos, la media de cada fila y la media de cada columna.

  • Solución:
# Matriz
matriz <- matrix(1:12, nrow = 4)

#  media de todos
mean(matriz)
## [1] 6.5
# Media por filas (MARGIN = 1 ya que es una operación por filas)
apply(matriz, MARGIN = 1, FUN = "mean")
## [1] 5 6 7 8
# Media por filas (MARGIN = 2 ya que es una operación por filas)
apply(matriz, MARGIN = 2, FUN = "mean")
## [1]  2.5  6.5 10.5

 

Ejercicio 5: del data.frame iris (al que puedes acceder desde el paquete {datasets}), obtén el nombre de las variables.

  • Solución:
# Nombres de variables
names(iris)
## [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

 

Ejercicio 6: del conjunto iris selecciona aquellas filas cuya variable Petal.Width sea distinta de 0.2.

  • Solución:
# Filtramos filas
filtro_fila <- subset(iris, subset = Petal.Width != 0.2)
filtro_fila
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 6            5.4         3.9          1.7         0.4     setosa
## 7            4.6         3.4          1.4         0.3     setosa
## 10           4.9         3.1          1.5         0.1     setosa
## 13           4.8         3.0          1.4         0.1     setosa
## 14           4.3         3.0          1.1         0.1     setosa
## 16           5.7         4.4          1.5         0.4     setosa
## 17           5.4         3.9          1.3         0.4     setosa
## 18           5.1         3.5          1.4         0.3     setosa
## 19           5.7         3.8          1.7         0.3     setosa
## 20           5.1         3.8          1.5         0.3     setosa
## 22           5.1         3.7          1.5         0.4     setosa
## 24           5.1         3.3          1.7         0.5     setosa
## 27           5.0         3.4          1.6         0.4     setosa
## 32           5.4         3.4          1.5         0.4     setosa
## 33           5.2         4.1          1.5         0.1     setosa
## 38           4.9         3.6          1.4         0.1     setosa
## 41           5.0         3.5          1.3         0.3     setosa
## 42           4.5         2.3          1.3         0.3     setosa
## 44           5.0         3.5          1.6         0.6     setosa
## 45           5.1         3.8          1.9         0.4     setosa
## 46           4.8         3.0          1.4         0.3     setosa
## 51           7.0         3.2          4.7         1.4 versicolor
## 52           6.4         3.2          4.5         1.5 versicolor
## 53           6.9         3.1          4.9         1.5 versicolor
## 54           5.5         2.3          4.0         1.3 versicolor
## 55           6.5         2.8          4.6         1.5 versicolor
## 56           5.7         2.8          4.5         1.3 versicolor
## 57           6.3         3.3          4.7         1.6 versicolor
## 58           4.9         2.4          3.3         1.0 versicolor
## 59           6.6         2.9          4.6         1.3 versicolor
## 60           5.2         2.7          3.9         1.4 versicolor
## 61           5.0         2.0          3.5         1.0 versicolor
## 62           5.9         3.0          4.2         1.5 versicolor
## 63           6.0         2.2          4.0         1.0 versicolor
## 64           6.1         2.9          4.7         1.4 versicolor
## 65           5.6         2.9          3.6         1.3 versicolor
## 66           6.7         3.1          4.4         1.4 versicolor
## 67           5.6         3.0          4.5         1.5 versicolor
## 68           5.8         2.7          4.1         1.0 versicolor
## 69           6.2         2.2          4.5         1.5 versicolor
## 70           5.6         2.5          3.9         1.1 versicolor
## 71           5.9         3.2          4.8         1.8 versicolor
## 72           6.1         2.8          4.0         1.3 versicolor
## 73           6.3         2.5          4.9         1.5 versicolor
## 74           6.1         2.8          4.7         1.2 versicolor
## 75           6.4         2.9          4.3         1.3 versicolor
## 76           6.6         3.0          4.4         1.4 versicolor
## 77           6.8         2.8          4.8         1.4 versicolor
## 78           6.7         3.0          5.0         1.7 versicolor
## 79           6.0         2.9          4.5         1.5 versicolor
## 80           5.7         2.6          3.5         1.0 versicolor
## 81           5.5         2.4          3.8         1.1 versicolor
## 82           5.5         2.4          3.7         1.0 versicolor
## 83           5.8         2.7          3.9         1.2 versicolor
## 84           6.0         2.7          5.1         1.6 versicolor
## 85           5.4         3.0          4.5         1.5 versicolor
## 86           6.0         3.4          4.5         1.6 versicolor
## 87           6.7         3.1          4.7         1.5 versicolor
## 88           6.3         2.3          4.4         1.3 versicolor
## 89           5.6         3.0          4.1         1.3 versicolor
## 90           5.5         2.5          4.0         1.3 versicolor
## 91           5.5         2.6          4.4         1.2 versicolor
## 92           6.1         3.0          4.6         1.4 versicolor
## 93           5.8         2.6          4.0         1.2 versicolor
## 94           5.0         2.3          3.3         1.0 versicolor
## 95           5.6         2.7          4.2         1.3 versicolor
## 96           5.7         3.0          4.2         1.2 versicolor
## 97           5.7         2.9          4.2         1.3 versicolor
## 98           6.2         2.9          4.3         1.3 versicolor
## 99           5.1         2.5          3.0         1.1 versicolor
## 100          5.7         2.8          4.1         1.3 versicolor
## 101          6.3         3.3          6.0         2.5  virginica
## 102          5.8         2.7          5.1         1.9  virginica
## 103          7.1         3.0          5.9         2.1  virginica
## 104          6.3         2.9          5.6         1.8  virginica
## 105          6.5         3.0          5.8         2.2  virginica
## 106          7.6         3.0          6.6         2.1  virginica
## 107          4.9         2.5          4.5         1.7  virginica
## 108          7.3         2.9          6.3         1.8  virginica
## 109          6.7         2.5          5.8         1.8  virginica
## 110          7.2         3.6          6.1         2.5  virginica
## 111          6.5         3.2          5.1         2.0  virginica
## 112          6.4         2.7          5.3         1.9  virginica
## 113          6.8         3.0          5.5         2.1  virginica
## 114          5.7         2.5          5.0         2.0  virginica
## 115          5.8         2.8          5.1         2.4  virginica
## 116          6.4         3.2          5.3         2.3  virginica
## 117          6.5         3.0          5.5         1.8  virginica
## 118          7.7         3.8          6.7         2.2  virginica
## 119          7.7         2.6          6.9         2.3  virginica
## 120          6.0         2.2          5.0         1.5  virginica
## 121          6.9         3.2          5.7         2.3  virginica
## 122          5.6         2.8          4.9         2.0  virginica
## 123          7.7         2.8          6.7         2.0  virginica
## 124          6.3         2.7          4.9         1.8  virginica
## 125          6.7         3.3          5.7         2.1  virginica
## 126          7.2         3.2          6.0         1.8  virginica
## 127          6.2         2.8          4.8         1.8  virginica
## 128          6.1         3.0          4.9         1.8  virginica
## 129          6.4         2.8          5.6         2.1  virginica
## 130          7.2         3.0          5.8         1.6  virginica
## 131          7.4         2.8          6.1         1.9  virginica
## 132          7.9         3.8          6.4         2.0  virginica
## 133          6.4         2.8          5.6         2.2  virginica
## 134          6.3         2.8          5.1         1.5  virginica
## 135          6.1         2.6          5.6         1.4  virginica
## 136          7.7         3.0          6.1         2.3  virginica
## 137          6.3         3.4          5.6         2.4  virginica
## 138          6.4         3.1          5.5         1.8  virginica
## 139          6.0         3.0          4.8         1.8  virginica
## 140          6.9         3.1          5.4         2.1  virginica
## 141          6.7         3.1          5.6         2.4  virginica
## 142          6.9         3.1          5.1         2.3  virginica
## 143          5.8         2.7          5.1         1.9  virginica
## 144          6.8         3.2          5.9         2.3  virginica
## 145          6.7         3.3          5.7         2.5  virginica
## 146          6.7         3.0          5.2         2.3  virginica
## 147          6.3         2.5          5.0         1.9  virginica
## 148          6.5         3.0          5.2         2.0  virginica
## 149          6.2         3.4          5.4         2.3  virginica
## 150          5.9         3.0          5.1         1.8  virginica

 

Ejercicio 7: del conjunto iris quédate solo con las variables Sepal.Length, Sepal.Width y Species.

  • Solución:
# Filtramos columnas
filtro_col <- subset(iris,  select = c("Sepal.Length", "Sepal.Width", "Species"))
filtro_col
##     Sepal.Length Sepal.Width    Species
## 1            5.1         3.5     setosa
## 2            4.9         3.0     setosa
## 3            4.7         3.2     setosa
## 4            4.6         3.1     setosa
## 5            5.0         3.6     setosa
## 6            5.4         3.9     setosa
## 7            4.6         3.4     setosa
## 8            5.0         3.4     setosa
## 9            4.4         2.9     setosa
## 10           4.9         3.1     setosa
## 11           5.4         3.7     setosa
## 12           4.8         3.4     setosa
## 13           4.8         3.0     setosa
## 14           4.3         3.0     setosa
## 15           5.8         4.0     setosa
## 16           5.7         4.4     setosa
## 17           5.4         3.9     setosa
## 18           5.1         3.5     setosa
## 19           5.7         3.8     setosa
## 20           5.1         3.8     setosa
## 21           5.4         3.4     setosa
## 22           5.1         3.7     setosa
## 23           4.6         3.6     setosa
## 24           5.1         3.3     setosa
## 25           4.8         3.4     setosa
## 26           5.0         3.0     setosa
## 27           5.0         3.4     setosa
## 28           5.2         3.5     setosa
## 29           5.2         3.4     setosa
## 30           4.7         3.2     setosa
## 31           4.8         3.1     setosa
## 32           5.4         3.4     setosa
## 33           5.2         4.1     setosa
## 34           5.5         4.2     setosa
## 35           4.9         3.1     setosa
## 36           5.0         3.2     setosa
## 37           5.5         3.5     setosa
## 38           4.9         3.6     setosa
## 39           4.4         3.0     setosa
## 40           5.1         3.4     setosa
## 41           5.0         3.5     setosa
## 42           4.5         2.3     setosa
## 43           4.4         3.2     setosa
## 44           5.0         3.5     setosa
## 45           5.1         3.8     setosa
## 46           4.8         3.0     setosa
## 47           5.1         3.8     setosa
## 48           4.6         3.2     setosa
## 49           5.3         3.7     setosa
## 50           5.0         3.3     setosa
## 51           7.0         3.2 versicolor
## 52           6.4         3.2 versicolor
## 53           6.9         3.1 versicolor
## 54           5.5         2.3 versicolor
## 55           6.5         2.8 versicolor
## 56           5.7         2.8 versicolor
## 57           6.3         3.3 versicolor
## 58           4.9         2.4 versicolor
## 59           6.6         2.9 versicolor
## 60           5.2         2.7 versicolor
## 61           5.0         2.0 versicolor
## 62           5.9         3.0 versicolor
## 63           6.0         2.2 versicolor
## 64           6.1         2.9 versicolor
## 65           5.6         2.9 versicolor
## 66           6.7         3.1 versicolor
## 67           5.6         3.0 versicolor
## 68           5.8         2.7 versicolor
## 69           6.2         2.2 versicolor
## 70           5.6         2.5 versicolor
## 71           5.9         3.2 versicolor
## 72           6.1         2.8 versicolor
## 73           6.3         2.5 versicolor
## 74           6.1         2.8 versicolor
## 75           6.4         2.9 versicolor
## 76           6.6         3.0 versicolor
## 77           6.8         2.8 versicolor
## 78           6.7         3.0 versicolor
## 79           6.0         2.9 versicolor
## 80           5.7         2.6 versicolor
## 81           5.5         2.4 versicolor
## 82           5.5         2.4 versicolor
## 83           5.8         2.7 versicolor
## 84           6.0         2.7 versicolor
## 85           5.4         3.0 versicolor
## 86           6.0         3.4 versicolor
## 87           6.7         3.1 versicolor
## 88           6.3         2.3 versicolor
## 89           5.6         3.0 versicolor
## 90           5.5         2.5 versicolor
## 91           5.5         2.6 versicolor
## 92           6.1         3.0 versicolor
## 93           5.8         2.6 versicolor
## 94           5.0         2.3 versicolor
## 95           5.6         2.7 versicolor
## 96           5.7         3.0 versicolor
## 97           5.7         2.9 versicolor
## 98           6.2         2.9 versicolor
## 99           5.1         2.5 versicolor
## 100          5.7         2.8 versicolor
## 101          6.3         3.3  virginica
## 102          5.8         2.7  virginica
## 103          7.1         3.0  virginica
## 104          6.3         2.9  virginica
## 105          6.5         3.0  virginica
## 106          7.6         3.0  virginica
## 107          4.9         2.5  virginica
## 108          7.3         2.9  virginica
## 109          6.7         2.5  virginica
## 110          7.2         3.6  virginica
## 111          6.5         3.2  virginica
## 112          6.4         2.7  virginica
## 113          6.8         3.0  virginica
## 114          5.7         2.5  virginica
## 115          5.8         2.8  virginica
## 116          6.4         3.2  virginica
## 117          6.5         3.0  virginica
## 118          7.7         3.8  virginica
## 119          7.7         2.6  virginica
## 120          6.0         2.2  virginica
## 121          6.9         3.2  virginica
## 122          5.6         2.8  virginica
## 123          7.7         2.8  virginica
## 124          6.3         2.7  virginica
## 125          6.7         3.3  virginica
## 126          7.2         3.2  virginica
## 127          6.2         2.8  virginica
## 128          6.1         3.0  virginica
## 129          6.4         2.8  virginica
## 130          7.2         3.0  virginica
## 131          7.4         2.8  virginica
## 132          7.9         3.8  virginica
## 133          6.4         2.8  virginica
## 134          6.3         2.8  virginica
## 135          6.1         2.6  virginica
## 136          7.7         3.0  virginica
## 137          6.3         3.4  virginica
## 138          6.4         3.1  virginica
## 139          6.0         3.0  virginica
## 140          6.9         3.1  virginica
## 141          6.7         3.1  virginica
## 142          6.9         3.1  virginica
## 143          5.8         2.7  virginica
## 144          6.8         3.2  virginica
## 145          6.7         3.3  virginica
## 146          6.7         3.0  virginica
## 147          6.3         2.5  virginica
## 148          6.5         3.0  virginica
## 149          6.2         3.4  virginica
## 150          5.9         3.0  virginica

 

Ejercicio 8: del conjunto iris selecciona a la vez aquellas filas cuya variable Petal.Width sea distinta de 0.2, y quédate solo con las variables Sepal.Length, Sepal.Width y Species.

  • Solución:
# Todo de una vez
filtro <- subset(iris, subset = Petal.Width != 0.2, select = c("Sepal.Length", "Sepal.Width", "Species"))
filtro
##     Sepal.Length Sepal.Width    Species
## 6            5.4         3.9     setosa
## 7            4.6         3.4     setosa
## 10           4.9         3.1     setosa
## 13           4.8         3.0     setosa
## 14           4.3         3.0     setosa
## 16           5.7         4.4     setosa
## 17           5.4         3.9     setosa
## 18           5.1         3.5     setosa
## 19           5.7         3.8     setosa
## 20           5.1         3.8     setosa
## 22           5.1         3.7     setosa
## 24           5.1         3.3     setosa
## 27           5.0         3.4     setosa
## 32           5.4         3.4     setosa
## 33           5.2         4.1     setosa
## 38           4.9         3.6     setosa
## 41           5.0         3.5     setosa
## 42           4.5         2.3     setosa
## 44           5.0         3.5     setosa
## 45           5.1         3.8     setosa
## 46           4.8         3.0     setosa
## 51           7.0         3.2 versicolor
## 52           6.4         3.2 versicolor
## 53           6.9         3.1 versicolor
## 54           5.5         2.3 versicolor
## 55           6.5         2.8 versicolor
## 56           5.7         2.8 versicolor
## 57           6.3         3.3 versicolor
## 58           4.9         2.4 versicolor
## 59           6.6         2.9 versicolor
## 60           5.2         2.7 versicolor
## 61           5.0         2.0 versicolor
## 62           5.9         3.0 versicolor
## 63           6.0         2.2 versicolor
## 64           6.1         2.9 versicolor
## 65           5.6         2.9 versicolor
## 66           6.7         3.1 versicolor
## 67           5.6         3.0 versicolor
## 68           5.8         2.7 versicolor
## 69           6.2         2.2 versicolor
## 70           5.6         2.5 versicolor
## 71           5.9         3.2 versicolor
## 72           6.1         2.8 versicolor
## 73           6.3         2.5 versicolor
## 74           6.1         2.8 versicolor
## 75           6.4         2.9 versicolor
## 76           6.6         3.0 versicolor
## 77           6.8         2.8 versicolor
## 78           6.7         3.0 versicolor
## 79           6.0         2.9 versicolor
## 80           5.7         2.6 versicolor
## 81           5.5         2.4 versicolor
## 82           5.5         2.4 versicolor
## 83           5.8         2.7 versicolor
## 84           6.0         2.7 versicolor
## 85           5.4         3.0 versicolor
## 86           6.0         3.4 versicolor
## 87           6.7         3.1 versicolor
## 88           6.3         2.3 versicolor
## 89           5.6         3.0 versicolor
## 90           5.5         2.5 versicolor
## 91           5.5         2.6 versicolor
## 92           6.1         3.0 versicolor
## 93           5.8         2.6 versicolor
## 94           5.0         2.3 versicolor
## 95           5.6         2.7 versicolor
## 96           5.7         3.0 versicolor
## 97           5.7         2.9 versicolor
## 98           6.2         2.9 versicolor
## 99           5.1         2.5 versicolor
## 100          5.7         2.8 versicolor
## 101          6.3         3.3  virginica
## 102          5.8         2.7  virginica
## 103          7.1         3.0  virginica
## 104          6.3         2.9  virginica
## 105          6.5         3.0  virginica
## 106          7.6         3.0  virginica
## 107          4.9         2.5  virginica
## 108          7.3         2.9  virginica
## 109          6.7         2.5  virginica
## 110          7.2         3.6  virginica
## 111          6.5         3.2  virginica
## 112          6.4         2.7  virginica
## 113          6.8         3.0  virginica
## 114          5.7         2.5  virginica
## 115          5.8         2.8  virginica
## 116          6.4         3.2  virginica
## 117          6.5         3.0  virginica
## 118          7.7         3.8  virginica
## 119          7.7         2.6  virginica
## 120          6.0         2.2  virginica
## 121          6.9         3.2  virginica
## 122          5.6         2.8  virginica
## 123          7.7         2.8  virginica
## 124          6.3         2.7  virginica
## 125          6.7         3.3  virginica
## 126          7.2         3.2  virginica
## 127          6.2         2.8  virginica
## 128          6.1         3.0  virginica
## 129          6.4         2.8  virginica
## 130          7.2         3.0  virginica
## 131          7.4         2.8  virginica
## 132          7.9         3.8  virginica
## 133          6.4         2.8  virginica
## 134          6.3         2.8  virginica
## 135          6.1         2.6  virginica
## 136          7.7         3.0  virginica
## 137          6.3         3.4  virginica
## 138          6.4         3.1  virginica
## 139          6.0         3.0  virginica
## 140          6.9         3.1  virginica
## 141          6.7         3.1  virginica
## 142          6.9         3.1  virginica
## 143          5.8         2.7  virginica
## 144          6.8         3.2  virginica
## 145          6.7         3.3  virginica
## 146          6.7         3.0  virginica
## 147          6.3         2.5  virginica
## 148          6.5         3.0  virginica
## 149          6.2         3.4  virginica
## 150          5.9         3.0  virginica

 

Ejercicio 9: calcula el número de filas borradas del ejercicio anterior. Tras hacer todo ello, traduce a castellano el nombre de las columnas del data.frame filtrado.

  • Solución:
# Filas borradas
nrow(iris) - nrow(filtro)
## [1] 29
# Cambiamos nombres a castellano del conjunto filtrado
names(filtro) <- c("longitud_sepalo", "anchura_sepalo", "especies")

 

Ejercicio 10: del conjunto iris accede a las columnas con nombres "Sepal.Length" y "Sepal.Width".

  • Solución:
# Accedemos por índice
iris[, 1:2]
##     Sepal.Length Sepal.Width
## 1            5.1         3.5
## 2            4.9         3.0
## 3            4.7         3.2
## 4            4.6         3.1
## 5            5.0         3.6
## 6            5.4         3.9
## 7            4.6         3.4
## 8            5.0         3.4
## 9            4.4         2.9
## 10           4.9         3.1
## 11           5.4         3.7
## 12           4.8         3.4
## 13           4.8         3.0
## 14           4.3         3.0
## 15           5.8         4.0
## 16           5.7         4.4
## 17           5.4         3.9
## 18           5.1         3.5
## 19           5.7         3.8
## 20           5.1         3.8
## 21           5.4         3.4
## 22           5.1         3.7
## 23           4.6         3.6
## 24           5.1         3.3
## 25           4.8         3.4
## 26           5.0         3.0
## 27           5.0         3.4
## 28           5.2         3.5
## 29           5.2         3.4
## 30           4.7         3.2
## 31           4.8         3.1
## 32           5.4         3.4
## 33           5.2         4.1
## 34           5.5         4.2
## 35           4.9         3.1
## 36           5.0         3.2
## 37           5.5         3.5
## 38           4.9         3.6
## 39           4.4         3.0
## 40           5.1         3.4
## 41           5.0         3.5
## 42           4.5         2.3
## 43           4.4         3.2
## 44           5.0         3.5
## 45           5.1         3.8
## 46           4.8         3.0
## 47           5.1         3.8
## 48           4.6         3.2
## 49           5.3         3.7
## 50           5.0         3.3
## 51           7.0         3.2
## 52           6.4         3.2
## 53           6.9         3.1
## 54           5.5         2.3
## 55           6.5         2.8
## 56           5.7         2.8
## 57           6.3         3.3
## 58           4.9         2.4
## 59           6.6         2.9
## 60           5.2         2.7
## 61           5.0         2.0
## 62           5.9         3.0
## 63           6.0         2.2
## 64           6.1         2.9
## 65           5.6         2.9
## 66           6.7         3.1
## 67           5.6         3.0
## 68           5.8         2.7
## 69           6.2         2.2
## 70           5.6         2.5
## 71           5.9         3.2
## 72           6.1         2.8
## 73           6.3         2.5
## 74           6.1         2.8
## 75           6.4         2.9
## 76           6.6         3.0
## 77           6.8         2.8
## 78           6.7         3.0
## 79           6.0         2.9
## 80           5.7         2.6
## 81           5.5         2.4
## 82           5.5         2.4
## 83           5.8         2.7
## 84           6.0         2.7
## 85           5.4         3.0
## 86           6.0         3.4
## 87           6.7         3.1
## 88           6.3         2.3
## 89           5.6         3.0
## 90           5.5         2.5
## 91           5.5         2.6
## 92           6.1         3.0
## 93           5.8         2.6
## 94           5.0         2.3
## 95           5.6         2.7
## 96           5.7         3.0
## 97           5.7         2.9
## 98           6.2         2.9
## 99           5.1         2.5
## 100          5.7         2.8
## 101          6.3         3.3
## 102          5.8         2.7
## 103          7.1         3.0
## 104          6.3         2.9
## 105          6.5         3.0
## 106          7.6         3.0
## 107          4.9         2.5
## 108          7.3         2.9
## 109          6.7         2.5
## 110          7.2         3.6
## 111          6.5         3.2
## 112          6.4         2.7
## 113          6.8         3.0
## 114          5.7         2.5
## 115          5.8         2.8
## 116          6.4         3.2
## 117          6.5         3.0
## 118          7.7         3.8
## 119          7.7         2.6
## 120          6.0         2.2
## 121          6.9         3.2
## 122          5.6         2.8
## 123          7.7         2.8
## 124          6.3         2.7
## 125          6.7         3.3
## 126          7.2         3.2
## 127          6.2         2.8
## 128          6.1         3.0
## 129          6.4         2.8
## 130          7.2         3.0
## 131          7.4         2.8
## 132          7.9         3.8
## 133          6.4         2.8
## 134          6.3         2.8
## 135          6.1         2.6
## 136          7.7         3.0
## 137          6.3         3.4
## 138          6.4         3.1
## 139          6.0         3.0
## 140          6.9         3.1
## 141          6.7         3.1
## 142          6.9         3.1
## 143          5.8         2.7
## 144          6.8         3.2
## 145          6.7         3.3
## 146          6.7         3.0
## 147          6.3         2.5
## 148          6.5         3.0
## 149          6.2         3.4
## 150          5.9         3.0
# Accedemos por nombre
iris[, c("Sepal.Length", "Sepal.Width")]
##     Sepal.Length Sepal.Width
## 1            5.1         3.5
## 2            4.9         3.0
## 3            4.7         3.2
## 4            4.6         3.1
## 5            5.0         3.6
## 6            5.4         3.9
## 7            4.6         3.4
## 8            5.0         3.4
## 9            4.4         2.9
## 10           4.9         3.1
## 11           5.4         3.7
## 12           4.8         3.4
## 13           4.8         3.0
## 14           4.3         3.0
## 15           5.8         4.0
## 16           5.7         4.4
## 17           5.4         3.9
## 18           5.1         3.5
## 19           5.7         3.8
## 20           5.1         3.8
## 21           5.4         3.4
## 22           5.1         3.7
## 23           4.6         3.6
## 24           5.1         3.3
## 25           4.8         3.4
## 26           5.0         3.0
## 27           5.0         3.4
## 28           5.2         3.5
## 29           5.2         3.4
## 30           4.7         3.2
## 31           4.8         3.1
## 32           5.4         3.4
## 33           5.2         4.1
## 34           5.5         4.2
## 35           4.9         3.1
## 36           5.0         3.2
## 37           5.5         3.5
## 38           4.9         3.6
## 39           4.4         3.0
## 40           5.1         3.4
## 41           5.0         3.5
## 42           4.5         2.3
## 43           4.4         3.2
## 44           5.0         3.5
## 45           5.1         3.8
## 46           4.8         3.0
## 47           5.1         3.8
## 48           4.6         3.2
## 49           5.3         3.7
## 50           5.0         3.3
## 51           7.0         3.2
## 52           6.4         3.2
## 53           6.9         3.1
## 54           5.5         2.3
## 55           6.5         2.8
## 56           5.7         2.8
## 57           6.3         3.3
## 58           4.9         2.4
## 59           6.6         2.9
## 60           5.2         2.7
## 61           5.0         2.0
## 62           5.9         3.0
## 63           6.0         2.2
## 64           6.1         2.9
## 65           5.6         2.9
## 66           6.7         3.1
## 67           5.6         3.0
## 68           5.8         2.7
## 69           6.2         2.2
## 70           5.6         2.5
## 71           5.9         3.2
## 72           6.1         2.8
## 73           6.3         2.5
## 74           6.1         2.8
## 75           6.4         2.9
## 76           6.6         3.0
## 77           6.8         2.8
## 78           6.7         3.0
## 79           6.0         2.9
## 80           5.7         2.6
## 81           5.5         2.4
## 82           5.5         2.4
## 83           5.8         2.7
## 84           6.0         2.7
## 85           5.4         3.0
## 86           6.0         3.4
## 87           6.7         3.1
## 88           6.3         2.3
## 89           5.6         3.0
## 90           5.5         2.5
## 91           5.5         2.6
## 92           6.1         3.0
## 93           5.8         2.6
## 94           5.0         2.3
## 95           5.6         2.7
## 96           5.7         3.0
## 97           5.7         2.9
## 98           6.2         2.9
## 99           5.1         2.5
## 100          5.7         2.8
## 101          6.3         3.3
## 102          5.8         2.7
## 103          7.1         3.0
## 104          6.3         2.9
## 105          6.5         3.0
## 106          7.6         3.0
## 107          4.9         2.5
## 108          7.3         2.9
## 109          6.7         2.5
## 110          7.2         3.6
## 111          6.5         3.2
## 112          6.4         2.7
## 113          6.8         3.0
## 114          5.7         2.5
## 115          5.8         2.8
## 116          6.4         3.2
## 117          6.5         3.0
## 118          7.7         3.8
## 119          7.7         2.6
## 120          6.0         2.2
## 121          6.9         3.2
## 122          5.6         2.8
## 123          7.7         2.8
## 124          6.3         2.7
## 125          6.7         3.3
## 126          7.2         3.2
## 127          6.2         2.8
## 128          6.1         3.0
## 129          6.4         2.8
## 130          7.2         3.0
## 131          7.4         2.8
## 132          7.9         3.8
## 133          6.4         2.8
## 134          6.3         2.8
## 135          6.1         2.6
## 136          7.7         3.0
## 137          6.3         3.4
## 138          6.4         3.1
## 139          6.0         3.0
## 140          6.9         3.1
## 141          6.7         3.1
## 142          6.9         3.1
## 143          5.8         2.7
## 144          6.8         3.2
## 145          6.7         3.3
## 146          6.7         3.0
## 147          6.3         2.5
## 148          6.5         3.0
## 149          6.2         3.4
## 150          5.9         3.0
# Accedemos a cada una individualmente
iris$Sepal.Length
##   [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
##  [19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
##  [37] 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5
##  [55] 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
##  [73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5
##  [91] 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
## [109] 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2
## [127] 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
## [145] 6.7 6.7 6.3 6.5 6.2 5.9
iris$Sepal.Width
##   [1] 3.5 3.0 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.0 3.0 4.0 4.4 3.9 3.5
##  [19] 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.0 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2
##  [37] 3.5 3.6 3.0 3.4 3.5 2.3 3.2 3.5 3.8 3.0 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3
##  [55] 2.8 2.8 3.3 2.4 2.9 2.7 2.0 3.0 2.2 2.9 2.9 3.1 3.0 2.7 2.2 2.5 3.2 2.8
##  [73] 2.5 2.8 2.9 3.0 2.8 3.0 2.9 2.6 2.4 2.4 2.7 2.7 3.0 3.4 3.1 2.3 3.0 2.5
##  [91] 2.6 3.0 2.6 2.3 2.7 3.0 2.9 2.9 2.5 2.8 3.3 2.7 3.0 2.9 3.0 3.0 2.5 2.9
## [109] 2.5 3.6 3.2 2.7 3.0 2.5 2.8 3.2 3.0 3.8 2.6 2.2 3.2 2.8 2.8 2.7 3.3 3.2
## [127] 2.8 3.0 2.8 3.0 2.8 3.8 2.8 2.8 2.6 3.0 3.4 3.1 3.0 3.1 3.1 3.1 2.7 3.2
## [145] 3.3 3.0 2.5 3.0 3.4 3.0