Está en la página 1de 209

R: Fundamentos

Introduccin a R

Qu es R?
Lenguaje para computo estadstico
Ihaka & Gentleman
Auckland, Nueva Zelanda
Implementacin open-source de S
Tecnicas estadsticas
Capacidades de visualizacin
Altamente extensible

Ventajas
Open source! Libre!
Maestro en graficas
Interfaz Lnea de comando
Reproductibilidad a travs de Scripts R
Paquetes R: extensiones de R
Comunidad vibrante

Desventajas
Fcil de aprender, pero difcil en la generacin de cdigos avanzados
Interfaz lnea de comando intimidante al principio
Cdigo mal escrito difcil de leer / mantener
Cdigo mal escrito es lento

Consola

Consola

Variables
Almacenar una variable para reusarla despus
<-

rea de trabajo (Workspace)

R script
Archivos de texto con comandos R
Automatiza tu trabajo
Height <- 2
Width <- 4
Area <- height * width
Area

R script

R script

Comentarios #

rea de trabajo (2)

Ejercicios
Introduccin a R

Aritmtica con R
Calcula :
3+4
12 - 6
2^5
28 %% 6
(5 + 5)/2
3*5

Cul de los siguientes enunciados es verdadero?


A diferencia de sus opositores SAS y SPSS, R es
completamente open-source.
R es open-source, pero cuesta trabajo compartir tu
cdigo con otros desde que R usa lnea de comandos.
Tpicamente toma demasiado tiempo el lanzamiento y
disponibilidad de nuevos paquetes R.
R es fcil de usar por sus limitadas habilidades graficas.
R trabaja bien con conjuntos de datos grandes, si el
cdigo es escrito apropiadamente y los datos encajan
en la memoria de trabajo.

Asignacin de variables: Genera el cdigo en


el editor
# Asigna el valor 42 a X
# Imprime el valor de la variable
X
# Asigna el valor 5 a la variable
my_apples
Imprime el valor de la variable
my_apples
Asigna un valor a las variables
my_apples y my_oranges

Suma estas variables


Crea la variable my_fruit para
almacenar la suma

rea de trabajo
Limpia el rea de trabajo
completamente
Rm(list = ls())
Lista el contenido de tu rea de
trabajo
Crea la variable horses
Crea la variable perros
Crea la variable animales que es
igual a suma de horses y dogs

Inspecciona el contenido del


rea de trabajo de nuevo
Remueve la variable perros del
rea de trabajo
Inspecciona el contenido del
rea de trabajo una vez ms

Tipos de datos bsicos


Introduccin a R

logical

numeric

numeric

character

Otros tipos atmicos


Double: precisin alta
Complex: Nmeros complejos
Raw: Almacenamiento de bytes

Coercin

Ejercicios
Introduccin a R

Coercin: Domestica tus datos


Crear las variables var1, var2 y
var3
var1 <- TRUE
var2 <- 0.3
var3 <- i
Convertir var1 a un carcter:
var1_char
Validar si var1_char es un
carcter

Convertir var2 a un valor lgico:


var2_log
Inspecciona la clase de var2_log
Coacciona var3 a un numero:
var3_num

Reto: Volumen de una dona


Crear las variables r y R, igual a 2 y 6 respectivamente, para calcular el
volumen de la dona, vol_donut.
Elimina todas las variables intermedias que has usado para calcular
vol_donut, para que solo quede su valor.
Finalmente, revisa el workspace cuando termines.
= 2 2 2

Tip: esta disponible in R por default como pi.

Crear y Nombrar Vectores


Introduccin a R

Vector
Secuencia de elementos de datos
Mismo tipo bsico
Character, numeric, logical

Crear un vector c()

Nombrar un vector names()

Nombrar un vector names()

Valor solo = vector

Vectores son homogneos


Slo elementos con el mismo tipo
Vectores atmicos <> listas
Coercin automtica si es necesaria

Coercin de vectores

Ejercicios
Introduccin a R

Crear un vector
Crea dos vectores asignando
perdidas/ganancias
For poker_vector:

On Monday you won 140$


Tuesday you lost 50$
Wednesday you won 20$
Thursday you lost 120$
Friday you won 240$

For roulette_vector:

On Monday you lost 24$


Tuesday you lost 50$
Wednesday you won 100$
Thursday you lost 350$
Friday you won 10$

Nombrando un vector
Agrega nombres a poker_vector y roulette_vector asignando los das
de la semana.
Crea una variable days_vector que contenga los das.
Usa la variable para asignarle nombres a los vectores poker y roulette.

Diferentes maneras para crear y nombrar


vectores
Cul de las siguientes variables es correcta?

Clculo vectorial
Introduccin a R

Clculo vectorial

Los clculos se realizan por element-wise

Clculo vectorial
Matemticas naturalmente extendidas!

Element-wise

Sum() and >

Ejercicios
Introduccin a R

Suma y resta de vectores


Suma los vectores A_vector y B_vector: total_vector
Imprime el resultado
Hazlo mismo, pero ahora resta los vectores: diff_vector
Imprime el resultado
A_vector <- c(1, 2, 3)
B_vector <- c(4, 5, 6)

Calcula tus ganacias


Asigna a la variable total_daily cuanto ganaste o perdiste cada da en total:

# Casino winnings from Monday to Friday


poker_vector <- c(140, -50, 20, -120, 240)
roulette_vector <- c(-24, -50, 100, -350, 10)
days_vector <- c("Monday", "Tuesday", "Wednesday",
"Thursday", "Friday")
names(poker_vector) <- days_vector
names(roulette_vector) <- days_vector
# Calculate your daily earnings: total_daily

Calcula ganancias totales: sum()


Calcula la cantidad total de dinero que perdiste/ganaste jugando
pker: total_poker
Haz lo mismo para el juego de ruleta: total_roulette
Despues, calcula las ganancias totales de la semana: total_week
Imprime la variable

Compara las ganancias totales


Crea un nuevo vector que contenga valores lgicos, que te diga si las
ganancias del pker exceden a los resultados de la ruleta:
poker_better.
Calcula el total_poker y total_roulette de nuevo.
Usando ambos totales, checa si el total de ganancias en pker son
mas altas que la ruleta usando una comparacin: choose_poker

Reto: Comparar desempeo pasado y actual


Calcula el total de ganancias de
la semana pasada en las Vegas:
total_past
Encuentra las diferencias de tu
desempeo del pker entre la
semana actual y la pasada:
diff_poker
Crea una variable lgica que diga
si tu total de ganancias de la
ruleta de la semana pasada
fueron ms altas que las de esta
semana: roulette_worsened

> days_vector
[1] "Monday"
"Tuesday"
"Thursday" "Friday"

"Wednesday"

> poker_past
[1]

-70

90

110 -120

30

> poker_present
Monday
Friday
240

Tuesday Wednesday

140

-50

20

Thursday
-120

> roulette_past
[1]

20

45

120 -230

40

> roulette_present
Monday
Friday

10

-24

Tuesday Wednesday
-50

100

Thursday
-350

Cdigo del Reto


> ls()
[1] "days_vector"

"poker_past"

"poker_present"

"roulette_past"

[5] "roulette_present"
> days_vector
[1] "Monday"

"Tuesday"

"Wednesday" "Thursday"

"Friday"

> poker_past
[1]

-70

90

110 -120

30

> poker_present
Monday

Tuesday Wednesday

140

-50

20

Thursday

Friday

-120

240

Thursday

Friday

-350

10

> roulette_past
[1]

20

45

120 -230

40

> roulette_present
Monday
-24

Tuesday Wednesday
-50

100

> total_past <- sum(poker_past) + sum(roulette_past)


> diff_poker <- poker_present - poker_past
> roulette_worsened <- sum(roulette_past) > sum(roulette_present)

Subdivisin de Vectores
Introduccin a R

Subdivisin por ndice

Subdivisin por nombre

Subdivisin de Mltiples elementos

Generar subconjuntos de todos, pero algunos

Subdivisin usando vectores lgicos

Subdivisin usando vectores lgicos

Ejercicios
Introduccin a R

Seleccin por ndice


Asigna los resultados del pker del da Mircoles: poker_wednesday
Asigna los resultados de la ruleta del da Viernes: roulette_Friday
Asigna los resultados del pker de los das Martes, Mircoles y Jueves:
poker_midweek
Asigna los resultados de la ruleta de los das Jueves y Viernes: roulette_endweek
# Casino winnings from Monday to Friday
poker_vector <- c(140, -50, 20, -120, 240)
roulette_vector <- c(-24, -50, 100, -350, 10)
days_vector <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
names(poker_vector) <- days_vector
names(roulette_vector) <- days_vector

Seleccin de vectores
Asigna los resultados a roulette_subset los resultados de la ruleta del
Martes al Viernes.
Imprime la variable resultante en la consola
# Casino winnings from Monday to Friday

poker_vector <- c(140, -50, 20, -120, 240)


roulette_vector <- c(-24, -50, 100, -350, 10)
days_vector <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
names(poker_vector) <- days_vector

names(roulette_vector) <- days_vector

Seleccin por nombre


Selecciona el cuarto elemento, correspondiente a Jueves, del vector
roulette_vector: roulette_Thursday
Selecciona las ganancias del pker del da Jueves usando subdivisin
por nombre: poker_thuesday
Crea un vector que contenga las ganancias del pker para los
primeros tres das de la semana: poker_start
Usando la funcin mean(), calcula el promedio de las ganancias del
pker durante estos primeros tres das: avg_poker_start

Seleccin por valores lgicos


Asigna los resultados de la ruleta del
primero, tercero y quinto dia:
roulette_subset
Selecciona los primeros tres das del
vector poker_vector usando un vector
de valores lgicos: poker_start
Checa si tus ganancias del pker son
positivas en los diferentes das de la
semana (i.e. > 0): selection_vector
Selecciona las cantidades que tu
ganaste en los das rentables usando
el vector selection_vector:
poker_profits

Asigna las cantidades que ganaste en


los das que terminaron de manera
positiva en la ruleta. Este vector
contiene las ganancias positivas del
vector roulette_vector. Se puede
hacer en una sola lnea!:
roulette_profits
Calcula la suma de las cantidades de
estos das rentables:
roulette_total_profits
Descubre cuantos das de ruleta
fueron rentables, utilizando la funcin
sum(): num_profitable_days

Reto: Vectores
Selecciona el puntaje de los
jugadores para el tercer juego:
player_third
Subdivide el vector player,
seleccionando solo los puntajes
que llevo al vector player ganar
al vector house: winning_scores
Cuenta el numero de veces que
player tuvo un puntaje menor
que 18: n_low_scores

> ls()
[1] "house" "player"
> house
[1] 20 15 21 20 20 17 19
> player
[1] 14 17 20 21 20 18 14

Crear y Nombrar Matrices


Introduccin a R

Matriz
Vector: Arreglo de 1D
Matriz: Arreglo de 2D
Filas y columnas
Un tipo de vector atmico

Crear una matriz matrix()

Crear una matriz: reciclando

rbind(), cbind()

rbind(), cbind()

Nombrar una matriz rownames(), colnames()

Nombrar una matriz

Coercin

Coercin

Ejercicios
Introduccin a R

Analizando matrices
Construye una matriz con una fila
por cada pelcula. La primera
columna es para las ganancias de
las taquillas en USA, y la segunda
columna para las taquillas fuera de
USA: star_wars_matrix

# Star Wars box office in


millions (!)
box <- c(460.998, 314.4,
290.475, 247.900, 309.306,
165.8)

De nuevo, construye la matriz


anterior con una fila para cada
pelcula.
# Star Wars box office in
millions (!)
new_hope <- c(460.998,
314.4)
empire_strikes <c(290.475, 247.900)
return_jedi <- c(309.306,
165.8)

Nombrando una matriz


Asgnale los nombres US y non-US a las columnas de la matriz
star_wars_matrix, respectivamente.
Asgnale los nombres "A New Hope", "The Empire Strikes Back y "Return
of the Jedi a las filas de la matriz.
# Star Wars box office in millions (!)
new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)
star_wars_matrix <- rbind(new_hope, empire_strikes,
return_jedi)

Sintaxis valida o no?


# option C
# option A

col <- c("US", "non-US")

star_wars_matrix <- rbind(new_hope,


empire_strikes, return_jedi)

row <- c("A New Hope", "The Empire Strikes


Back", "Return of the Jedi")

rownames(star_wars_matrix) <- c("US", "nonUS")

star_wars_matrix <- matrix(c(new_hope,


empire_strikes, return_jedi),

colnames(star_wars_matrix) <- c("A New


Hope", "The Empire Strikes Back", "Return of
the Jedi")

byrow = TRUE,
nrow = 3, dimnames = list(col, row))
# option D

# option B
col <- c("US", "non-US")
row <- c("A New Hope", "The Empire Strikes
Back", "Return of the Jedi")

rbind(new_hope, empire_strikes, return_jedi,


names = c(col, row))

col <- c("US", "non-US")


row <- c("A New Hope", "The Empire Strikes
Back", "Return of the Jedi")
star_wars_matrix <- matrix(c(new_hope,
empire_strikes, return_jedi),
byrow = TRUE,
nrow = 3, dimnames = list(row, col))

Taquillas a nivel mundial


Calcula las ganancias para todas las taquillas del
mundo para las tres pelculas: worldwide_vector

Agrega la columna generada en el ejercicio


anterior a la matriz star_wars_matrix. Usa la
funcin cbind().

# Star Wars box office in millions (!)


revenue
new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)
star_wars_matrix <- rbind(new_hope,
empire_strikes, return_jedi)
colnames(star_wars_matrix) <- c("US",
"non-US")
rownames(star_wars_matrix) <- c("A New
Hope", "The Empire Strikes Back",
"Return of the Jedi")

# Star Wars box office in millions (!)


new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)
star_wars_matrix <- rbind(new_hope,
empire_strikes, return_jedi)
colnames(star_wars_matrix) <- c("US",
"non-US")
rownames(star_wars_matrix) <- c("A New
Hope", "The Empire Strikes Back",
"Return of the Jedi")

Agregando una fila y calculando el total de


ingresos

Genera una nueva matriz concatenando star_wars_matrix en las


primeras tres filas y star_wars_matrix2 en las siguientes tres filas:
all_wars_matrix

> # Matrix that contains the first trilogy box office


> star_wars_matrix
US non-US
A New Hope

460.998

314.4

The Empire Strikes Back 290.475

247.9

Return of the Jedi

165.8

309.306

> # Matrix that contains the second trilogy box office


> star_wars_matrix2
US non-US
The Phantom Menace

474.5

552.5

Attack of the Clones 310.7

338.7

Revenge of the Sith

468.5

380.3

Calcula el total de ingresos para las regiones de USA y fueras de USA:


total_revenue_vector

all_wars_matrix

US non-US
A New Hope

460.998

314.4

The Empire Strikes Back 290.475

247.9

Return of the Jedi

309.306

165.8

The Phantom Menace

474.500

552.5

Attack of the Clones

310.700

338.7

Revenge of the Sith

380.300

468.5

# Print box office Star Wars


all_wars_matrix

Reto: Matrices
Objetivo: construir y nombrar los
puntajes de la matriz.
Crea una nueva matriz, con las siguientes
propiedades: scores
4 filas corresponden a 4 filas de tu cine en
casa.
7 columnas: las 6 primeras corresponden a
los 6 asientos por fila y contiene los
puntajes; la septima fila corresponde a la
suma de los puntajes por fila.

row names: row1, row2,


row3 and row4.
column names: c1, c2,
c3, c4, c5, c6 and
total.
first_row
9
10
second_row
9
6
third_row
7
8
fourth_row
6
8

Matrices subconjuntos
Introduccin a R

Elemento subconjunto

Subdivisin por filas o columnas

Subdivisin de mltiples elementos

Subdivisin por nombre

Subdivisin con vectores lgicos

Ejercicios
Introduccin a R

Seleccin de elementos
Selecciona las ganancias de las taquillas USA para The Empire Strikes Back
Selecciona las ganancias de las taquillas non-USA para A New Hope
> star_wars_matrix
US non-US
A New Hope
460.998 314.4
The Empire Strikes Back 290.475 247.9
Return of the Jedi
309.306 165.8
Selecciona todas las ganancias de las taquillas USA de la matriz star_wars_matrix
Extrae la informacion de las ganancias para A New Hope
Calcula el promedio de las ganancias para Non-USA: non_us_all
Calcula el promedio pero solo para las primeras dos peliculas de Star Wars:
non_us_some

Crea submatrices
Selecciona todas las ganancias para A New Hope y Return of the Jedi de la
matriz star_wars_matrix
Cul de las siguientes llamadas selecciona el total de ganancias para la primera,
cuarta y sexta pelcula?
# option A
all_wars_matrix[seq(2, 6, by = 2), "total"]
# option B
all_wars_matrix[c(F,T,F,T,F,T), c(F,T)]
# option C
all_wars_matrix[c("The Empire Strikes Back", 4, 6), c(T,T,F)]
# option D
all_wars_matrix[c(F,T), "total"]

Reto: Subdivisin de matrices

Usando una combinacin de operaciones matriciales, crea un vector


total_views_loud, que contenga el nmero total de veces que cada
uno de los tres mas fuertes debatientes Rachel, Walter y Dave han
visto las pelculas de Star Wars.

> view_count_2
Christel Walter Dave Monica
A New Hope

> ls()

The Empire Strikes Back

[1] "view_count_1" "view_count_2"

Return of the Jedi

> view_count_1

The Phantom Menace

Attack of the Clones

Revenge of the Sith

Mark Laurent Rachel Pierre


A New Hope

The Empire Strikes Back

Return of the Jedi

The Phantom Menace

Attack of the Clones

Revenge of the Sith

Clculo Matricial
Introduccin a R

Clculo Matricial
colSums(), rowSums()
Aritmtica estndar posible
Calculo element-wise

lotr_matrix

Matriz Clculo escalar

Matriz Clculo escalar

Clculo matricial

Multiplicacin de matrices

Matrices y Vectores
Muy similares
Vector = 1D, matriz = 2D
Coercin si es necesaria
Reciclado si es necesario
Clculo element-wise

Aritmtica con matrices


Asigna una matriz con los nmeros estimados de
visitantes de Non-US y US (en millones) para las
tres pelculas considerando que el boleto costo $5:
visitors
Imprime el resultado
Asigna la matriz con tu numero estimado de
visitantes de non-US y US para las tres peliculas:
visitors
Asigna el promedio del numero de visitantes en US
para una pelicula de Star Wars, necesitaras
subdivisin de matrices aqu: average_us_visitors
Asigna el promedio del numero de visitantes en
non-US areas: average_non_us_visitors

# Star Wars box office in millions (!)


box_office_all <- c(461, 314.4, 290.5,
247.9, 309.3, 165.8)
movie_names <- c("A New Hope","The
Empire Strikes Back","Return of the
Jedi")
col_titles <- c("US","non-US")
star_wars_matrix <matrix(box_office_all, nrow = 3, byrow
= TRUE, dimnames = list(movie_names,
col_titles))
# Definition of ticket_prices_matrix
ticket_prices_matrix <- matrix(c(5, 5,
6, 6, 7, 7), nrow = 3, byrow = TRUE,
dimnames = list(movie_names,
col_titles))

Reto: Que la fuerza de las matrices te


acompae
> ls()

Objetivo: Calcular la
ganancia de los estudios
StarWars
Calcular la cantidad de
dinero por pelcula:

Restando la comisin de
los teatros en funcin de
cada pelcula y por regin
(remaining)
Calculando el restante
(remaining) entrante por
pelcula y finalmente
(remaining_tot)
Restando el presupuesto
de lo anterior (profit)

[1] "box_office_all"
"commission_rates"

"budget"

"col_titles"

[5] "movie_names"

"star_wars_matrix"

> budget

A New Hope The Empire Strikes Back


13.0

18.0

> commission_rates
US non-US
A New Hope

0.25

0.28

The Empire Strikes Back 0.23

0.26

Return of the Jedi

0.21

0.20

> star_wars_matrix
US non-US
A New Hope

461.0

314.4

The Empire Strikes Back 290.5

247.9

Return of the Jedi

165.8

309.3

Return of the Jedi


32.5

Factores
Introduccin a R

Variables Categricas
Nmero limitado de diferentes valores
Pertenecen a una categora
En R: factor

Crear Factor

factor ()

Ordenar niveles diferentemente

Renombrar los niveles del factor

Nominal versus Ordinal

Factor ordenado

Envolver
Factores para variables categricas
Factores son vectores enteros
Cambiar los niveles del factor
levels () funcin o argumento de etiquetas
Factores ordenados: ordenados = verdadero

Ejercicios
Introduccin a R

Vector a factor
Convertir el vector hand_vector a un factor: hand_factor
Revisar la estructura del factor usando str()
# Definition of hand_vector
hand_vector <- c("Right", "Left", "Left", "Right", "Left")

Factor levels
Convert the character vector survey_vector into a factor vector,
survey_factor, with the levels "Right" and "Left".
Print survey_factor to inspect its contents.
# Definition of survey_vector
survey_vector <- c("R", "L", "L", "R", "R")

Summarizing a factor
Ask a summary() of survey_vector and survey_factor. Interpret the
results of both vectors. Are they both equally useful in this case?
# Defintion of survey_vector and survey_factor
survey_vector <- c("R", "L", "L", "R", "R")
survey_factor <- factor(survey_vector, levels = c("R", "L"), labels =
c("Right", "Left"))

Nominal versus Ordinal, Unordered versus


Ordered
Convert animal_vector to a factor, animal_factor. Make it an ordered
factor if that's appropriate.
Encode temperature_vector as a factor called temperature_factor.
Again, order this factor if that makes sense.
Print out both factors and compare the outputs.
# Definition of animal_vector and temperature_vector
animal_vector <- c("Elephant", "Giraffe", "Donkey", "Horse")
temperature_vector <- c("High", "Low", "High", "Low", "Medium")

Left better than right?


In survey_factor you have a two-level factor, containing "Left" and "Right". But
how does R value these relatively to each other? In other words, who does R
think is better, left or right?
Select the first element from survey_factor and store it in the variable right.
Select the second element form survey_factor and store it in the variable left.
Using the greater than sign, find out whether right is greater than left.
# Definition of survey_vector and survey_factor
survey_vector <- c("R", "L", "L", "R", "R")
survey_factor <- factor(survey_vector, levels = c("R", "L"), labels = c("Right", "Left"))

Ordered factors
Let us say that you are leading a research team of five data analysts and that you
want to evaluate their performance. To do this, you track their speed, evaluate
each analyst as "Slow", "OK" or "Fast", and save the results in speed_vector.
As a first step, assign speed_vector knowing that:

Analyst 1 is OK,
Analyst 2 is Slow,
Analyst 3 is Slow,
Analyst 4 is OK and
Analyst 5 is Fast.

No need to specify these are factors yet.

Ordered factors (2)


Use the example code above to define speed_factor, that contains the
speed information as an ordered factor.
Print speed_factor to the console.
Generate a summary of speed_factor: automagically, R prints the
factor levels in the right order.
# Create speed_vector
speed_vector <- c("OK", "Slow", "Slow", "OK", "Fast")

Comparing ordered factors


Check whether data analyst 2 is faster than data analyst 5 and assign
the result to compare_them. Remember the > operator allows you to
check whether one element is larger than the other.
# Definition of speed_vector and speed_factor
speed_vector <- c("Fast", "Slow", "Slow", "Fast", "Ultra-fast")
factor_speed_vector <- factor(speed_vector, ordered = TRUE, levels =
c("Slow", "Fast", "Ultra-fast"))

Flying high in factor space


Goal : Factorize the questionnaire data
Convert the fly_class vector to a factor,
fly_class_factor. The display names of the
different categories should be
"economy", "business" and "first". Use a
combination of levels and labels to
achieve this. Finally, order the factors if
this is appropriate in this context.

> ls()
[1] "fly_class"
> fly_class
[1] "eco" "bus" "eco" "bus" "fir" "eco"
"eco" "bus" "eco" "eco" "fir" "eco"
[13] "eco" "eco" "eco" "bus" "eco" "eco"
"eco" "fir" "bus" "eco" "eco" "fir"
[25] "eco" "bus" "eco" "eco" "eco" "eco"
"fir" "fir" "eco" "bus" "eco" "eco"
[37] "bus" "eco" "eco" "eco" "eco" "eco"
"eco" "eco" "eco" "eco" "eco" "eco"
[49] "eco" "bus"

Crear y nombrar listas


Introduccin a R

Vector- Matriz- Lista


Vector: 1D, mismo tipo
Matriz: 2D, mismo tipo
Lista
Diferentes objetos de R
Ninguna coercin
Prdida de alguna funcionalidad

Crear lista

list ()

Nombrar lista

Nombrar Lista

Lista en lista

Ejercicios
Introduccin a R

Create a list
Construct a list, named my_list, that contains the variables my_vector, my_matrix
and my_factor as list components.
# Numeric vector: 1 up to 10
my_vector <- 1:10

# Numeric matrix: 1 up to 9
my_matrix <- matrix(1:9, ncol = 3)
# Factor of sizes
my_factor <- factor(c("M","S","L","L","M"), ordered = TRUE, levels = c("S","M","L"))

Listception: lists in lists


Construct a list, named my_super_list, that now contains the four
predefined variables listed in the sample code (in the same order).
Print the structure of my_super_list with the str() function.
my_vector <- 1:10
my_matrix <- matrix(1:9, ncol = 3)
my_factor <- factor(c("M","S","L","L","M"), ordered = TRUE, levels =
c("S","M","L"))
my_list <- list(my_vector, my_matrix, my_factor)

Create a named list


Change the code that build my_list by adding names to the
components. Use for my_matrix the name mat, for my_vector the
name vec and for my_factor the name fac.
Print the list to the console and inspect the output.

my_vector <- 1:10


my_matrix <- matrix(1:9, ncol = 3)
my_factor <- factor(c("M","S","L","L","M"), ordered = TRUE, levels =
c("S","M","L"))

Create a named list (2)


Start by creating a list for the movie "The Shining". The variables actors and
reviews that you'll need have already been coded in the sample code.
Create the variable shining_list. The list contains the movie title first as
"title", then the actor names as "actors", and finally the review scores
factor as "reviews". Pay attention to the correct naming!
# Create actors and reviews
actors_vector <- c("Jack Nicholson","Shelley Duvall","Danny Lloyd","Scatman
Crothers","Barry Nelson")
reviews_factor <- factor(c("Good", "OK", "Good", "Perfect", "Bad", "Perfect",
"Good"),
ordered = TRUE, levels = c("Bad", "OK", "Good", "Perfect"))

List your skills


Goal : Merge your skills and display them!

> ls()
[1] "cont" "prop" "top"

Create a list lst, that contains the fifth element from top and
the entire fourth column of prop. Do not name this list.

> cont

Create a new list, skills, that contains top, cont, prop and lst.
Name the list elements topics, context, properties and
list_info, respectively.

Levels: core data

Finally, displays the structure of skills.

[1] core data data data data


> prop

vector matrix factor list

1D

TRUE FALSE TRUE TRUE

heterogeneous FALSE FALSE FALSE TRUE


subsetting
calculus

TRUE TRUE TRUE TRUE


TRUE TRUE FALSE FALSE

> top
[1] "basic data type" "vectors"
[5] "lists"

"matrices"

"factors"

Subconjuntos y extender listas


INTRODUCCION A R

Lista <song>

[ versus [[

[ versus [[

Subconjunto por nombres

Subconjunto por valores lgicos

$ y extender

Listas extendidas

Envolver
[[ or [ ?
[[ seleccionar elemento de la lista
[ resultados en sub-lista
[[ y $ para subconjuntos y extender listas

Ejercicios
Introduccin a R

Selecting elements from a list


Select the actors from shining_list and assign the result to
act.

Create a new list containing only the title and the reviews
of shining_list; save the new list in sublist.

Display the structure of sublist.

> ls()
[1] "shining_list"
> shining_list

$title
[1] "The Shining"
$actors
[1] "Jack Nicholson" "Shelley Duvall" "Danny Lloyd"
"Scatman Crothers"

[5] "Barry Nelson"


$reviews
[1] Good OK

Good Perfect Bad

Levels: Bad < OK < Good < Perfect

Perfect Good

Chaining your selections


Select from the shining_list the last actor and assign the result to
last_actor.
Select from the shining_list the second review score (which is a
factor). Store the result in second_review.

Vector Subsetting vs. List Subsetting


All these single and double square
brackets to perform subsetting on
vectors, matrices, factors and now
also lists might lead to some
confusion. As a summarizing exercise
on vector subsetting, consider the
following 4 commands.
shining_list has been extended with
even more information (source:
imagination); the list is available in the
workspace. Which of the following
statements are correct?

A) shining_list$box[1,2] gives the nonUS box office of the first release.


B) shining_list[[c(2,4)]] creates a list
containing the actors vector and the
box office matrix.
C) shining_list[[c(2,4)]] returns
"Scatman Crothers".
D) shining_list$reviews[1] >
shining_list[[3]][3] is invalid syntax.

Extending a list (1)


Add the release year to shining_list under the name "year".
Add the director to the list with the name "director".
Finally, inspect the structure of shining_list.

shining_list$my_opinion <- "Love it!"


shining_list[["my_opinion"]] <- "Love it!"
shining_list <- c(shining_list, my_opinion = "Love it!")

Extending a list (2)


Add both the year (1980) and director (Stanley Kubrick) to shining_list
again. Try to do it in a one-liner this time, and save the result in a new
variable, shining_list_ext.
Again, have a look at the structure of shining_list_ext.

List your skills (2)


Goal : What skills are key?

Use subsetting techniques to select the following elements from skills (in
this order):

The second element of the topics vector,


The second element of the context factor,
The entire logical vector inside the list_info.

Finally group the elements you selected in the previous steps in a new list,
key_skills.

Explorando el Data Frame


Introduccin a R

Conjunto de datos
Observaciones
Variables
Ejemplo: gente
Cada persona = observacin
Propiedades (nombre, edad ) = variables

Matriz? Necesita tipos diferente


Lista? No muy practica

Data Frame
Especialmente para conjunto de datos
Filas = observaciones (personas)
Columnas = variables (edad, nombre, )
Contiene elementos de diferentes tipos
Elementos en la misma columna: mismo tipo

Crear Data Frame


Importar desde una fuente de datos
Archivo CSV
Bases de datos relacionales (SQL)
Paquetes de software (Excel, SPSS )

Crear Data Frame data.frame()

Nombrar Data Frame

Estructura Data Frame

Ejercicios
Introduccin a R

Have a look at your data set


Print the first observations of the mtcars data set.
Use the tail() function to display the last observations.
Finally, display the overall dimensions of the mtcars data frame with
dim().

Creating a data frame


Use the function data.frame() to construct planets_df.
Make sure that you've actually created a data frame with 8 observations and 5
variables with str().
# Definition of vectors
planets <- c("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus",
"Neptune")
type <- c("Terrestrial planet", "Terrestrial planet", "Terrestrial planet",
"Terrestrial planet", "Gas giant", "Gas giant", "Gas giant", "Gas giant")
diameter <- c(0.382, 0.949, 1, 0.532, 11.209, 9.449, 4.007, 3.883)
rotation <- c(58.64, -243.02, 1, 1.03, 0.41, 0.43, -0.72, 0.67)
rings <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)

Subdivisin Extensin
Orden Data Frames
Introduccin a R

Subdivisin Data Frame


Sintaxis de subdivisin de matrices y listas
[ de matrices
[[ y $ de listas

people

Subdivisin Data Frame

Subdivisin Data Frame

Data Frame ~ List

Data Frame ~ List

Extensin Data Frame


Agregar columnas = agregar variables
Agregar filas = agregar observaciones

Agregar columna

Agregar fila

Ordenar

Ordenar

Ordenar

Ejercicios
Introduccin a R

Grficas Bsicas
Introduccin a R

Grficas en R
Crear grficas con cdigo
Fcil replicacin y modificacin
Reproducibilidad!
graphics package
ggplot2, ggvis, lattice

graphics package
Muchas funciones
plot() and hist()
plot()
Genrico
Diferentes entradas -> Diferentes grficas
Vectores, modelos lineares, densidades de Kernel

countries

plot() (categrico)

plot() (numrico)

plot() (2x numrico)

plot() (2x numrico)

plot() (2x numrico)

plot() (2x numrico)

hist()
Abreviatura de histograma
Representacin visual de distribucin
Bin a todos los valores
Grfica de frecuencias de bins

hist()

hist()

Otras funciones graphics


barplot()
boxplot()
pairs()

Ejercicios
Introduccin a R

Personalizacin de Grficas
Introduccin a R

mercury

Plot bsico

Plot de fantasa

Plot de fantasa

Parmetros grficos

Parmetros Grficos

par()

par()

par()

Ms parmetros grficos

Ms parmetros grficos

Ms parmetros grficos

Ms parmetros grficos

lty: Tipo de lnea

pch: Smbolos

Ejercicios
Introduccin a R

Mltiples Grficas
Introduccin a R

Grficas hasta ahora


Simple fuente de datos
No combinacin de graficas
No diferentes capas

shop

Parmetro mfrow en par()

Parmetro mfrow

Ejercicios
Introduccin a R

También podría gustarte