Este código genera secuencias y repeticiones de vectores en R:
1. La línea 1:10 genera un vector numérico desde 1 hasta 10.
2. La línea rep(1:4,2) repite el vector de 1 a 4 dos veces, resultando en el vector [1,2,3,4,1,2,3,4]. La función rep() repite el vector especificado (1:4) la cantidad de veces indicada en el segundo argumento (2).
Así, rep() permite generar repeticiones de vectores de manera fácil en R.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Recursividad directa e indirecta
• Recursión versus iteración
Creado por Ing. Alvaro Enrique Ruano
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Recursividad directa e indirecta
• Recursión versus iteración
Creado por Ing. Alvaro Enrique Ruano
Variación del algoritmo posicional de la multiplicación, es una técnica usada en la India. Se trata de un cuadro que tiene la ventaja de no tener que ir corriendo espacios y disminuye el riesgo de olvidar algún dígito que se lleve.
El objetivo de está presentación no es desarrollar un tutorial acerca de cómo empezar a usar R, más bien tratar de convencer al interesado de que invertir tiempo en desarrollar habilidades y competencias en el software es una buena inversión.
“R”
Es el lenguaje de programación que se utiliza para realizar el análisis estadístico de grandes volúmenes de información con la finalidad de descubrir patrones entre los datos que facilite la toma de decisiones
Métodos no experimentales y cuasi-experimentales. Comparación antes-después. Diferencias simples. Diferencias en diferencia. Discontinuidad en la Regresión. Matching. Variables instrumentales. Métodos de selección aleatoria.
Modelos de respuesta binaria. Modelo lineal de probabilidad. Modelos Logit y Probit. Formas de interpretación. Ratios de probabilidades. Efectos marginales. Bondad de ajuste
Bondad de ajuste. tabla de clasificación. Pseudo r-cuadrado. Aplicaciones. Perfiles de probabilidad.
Aquí se brinda un tratamiento más detallado a los modelos de heterocedasticidad. Test Breusch-Pagan. Test de White. Mínimos cuadrados ponderados (MCP). Mínimos cuadrados generalizados (MCG). Mínimos cuadrados generalizados factibles (MCGF). Estimación consistente de White.
Clase10 Endogeneidad y estimación por variables instrumentalesNerys Ramírez Mordán
Tratamiento, variables instrumentales, Validez del instrumento, Varianza del estimador VI, Mínimo cuadrado en 2 etapas
(MC2E), Prueba de endogeneidad de Hausman
Media condicional, Descomposición de una
variable aleatoria, Regresión particionada, Efecto causal, Bootstrap, Momentos del estimador, Efectos marginales de formas funcionales, Bondad de ajuste
Normalidad: Test gráficos, Test Jarque-Bera, Test Shapiro Wilk.
Multicolinialidad: Factor inflador de varianza,
Heterocedasticidad: Test Breusch-Pagan, Test de White, Míınimos Cuadrados Generalizados, Errores robustos
Problemas de especificación: Variable omitida, proxys, Variable irrelevante, Error de medición en las
independientes. Pruebas de errores de
especificación: Test de Ramsey. Selección del modelo; Problemas de datos.
Clase 1 del curso de fundamentos de Matlab para el análisis económico. Presenta aspectos fundamentales del ambiente del software, además de introducir a las operaciones con vectores, las funciones, vectores lógicos y principales operadores de Matlab, todo con ejemplos aplicados a la economía.
4. Por qué R?
Fuente:
12/10/2016 4
Es gratis.
Curva de aprendizaje plana, pero
con alta potencia.
Es flexible.
Se actualiza constantemente,
contrario a los programas
comerciales tradicionales.
Alto alcance.
Incorporación anticipada de
técnicas estadísticas.
“R es el lenguaje de programación
estadístico más potente y más
flexible del planeta” (Norman Nie,
co fundador de SPSS)
5. Objetivo y motivación
Siempre el objetivos es poder reproducir el trabajo en el futuro,
modificando los menos posible el código, entres las
aplicaciones de la programar rutinas nos encontramos:
– En Boxjenkins necesitamos determinar la estructura
ARIMA(p,I,d) de series univariadas, en tal sentido,
necesitamos estimar los parámetros correspondiente al
modelo, podemos hacer que R tome la decisión de una
cantidad importante de series.
– El orden de integración.
– Guardar resultados de ecuaciones y secuencias basados
en matrices.
12/10/2016 5
8. 1.1. Introducción
• R es un dialecto de lenguaje S, case-sensitive, que
inicialmente se desarrolló como una serie de versiones de
fortran. El mismo permite una gran cantidad de funciones
estadísticas básicas que se encuentran predeterminadas y
la creación de funciones.
• R es un lenguaje de programación de distribución libre creado
en 1993 por Ross Ihaka y Robert Gentleman. Que funciona
como ambiente en el que se aplican técnicas estadísticas en
lugar de una acumulación gradual de herramientas muy
específicas y poco flexibles (Santana y Farfáan, 2014).
12/10/2016 8
9. 1.1. Instalación y actualización
• Para instalar R se visita el siguiente sitio:
https://www.r-project.org/
• Actualizar:
install.packages("installr")
setInternet2(TRUE)
installr::updateR() # actualizar R.
Las
actualizaciones
incluyen cambios
y mejoras pero
puede hacer
disfuncional los
programas ya
realizados.
12/10/2016 9
10. 1.2. Introducción: interfaz
R funciona como una
calculadora.
> # Calculate 3 + 4
> 3 + 4
[1] 7
No obstante, es
recomendable guardar
los resultados un objeto
para poder automatizar
procesos.
> # Calculate 3 + 4
> myResults<-3 + 4
> myResults
[1] 7
Permite ver script, comandos, variables y
objetos, paquetes cargados, gráficos
12/10/2016 10
11. • Cuando introduces una expresión en la línea de comandos y das
ENTER, R evalúa la expresión y muestra el resultado. Por tanto, R
puede ser usado como una calculadora, ya que realiza operaciones
aritméticas, además de operaciones lógicas.
> 5*6
[1] 30
• imprime el resultado. Sin embargo, R es un lenguaje de
programación y normalmente la razón por la que usas éstos es para
automatizar los proceso y evitar la repetición innecesaria. Por tanto,
puedes guardar los resultados anteriores en otro cálculo.
• La manera de asignar un valor a una variable en R es usar el
operador de asignación (<-). Es equivalente a generar una variable.
> mi_result<-5*6
IMPORTANTE: Hay que acostumbrarse a no usar “=”
1.2. Introducción: interfaz
12/10/2016 11
12. • [Ejercicio 1.1.] Acaban de ofrecerte el precio de un producto
($130) cuyo pago en efectivo aplica un descuento del 10%,
calcula el precio final a pagar luego del descuento y guardalo en
un objeto llamado pre_art1. Posteriormente, obtén el precio total
a pagar, conociendo que tenias un carrito con valor de $500.
> pre_art1 <-130*0.9
> pre_art1 + 500
[1] 617
• Historial de comandos: Mediante el teclado (flechas) se puede
acceder a los últimos comandos ejecutados.
Ejercicio de clases:
12/10/2016 12
13. 1.3. Introducción: uso
> 12+8+15+17+13+20+20
[1] 105
> 105/7
[1] 15
> (12+8+15+17+13+20+20)/7
[1] 15
> d<-c(12,8,15,17,13,20,20)
sum(d)
[1] 105
> length(d)
[1] 7
> sum(d)/length(d)
[1] 15
> mean(d)
[1] 15
#También podemos componer funciones
length(mean(d))
Tomado de Andrés Guerrero
> Un ejemplo del uso completo (entendamos la idea)
> # Calculo de la media aritmética de 7 números
12/10/2016 13
14. • Las expresiones de asignación. Observemos por ejemplo qué
pasa con la siguiente expresión:
> x <- y
Error: object "y" not found
• “R se ha quejado de la inexistencia del símbolo “y”, pero no se ha
quejado de la inexistencia del símbolo “x”. esto porque símbolo a
la izquierda de la asignación se emplea para la escritura de un
objeto al que hace referencia y, si no existe, esto equivale a lo que
sería la definición de una variable en otros lenguajes. En cambio,
el símbolo o símbolos que aparecen a la derecha son de lectura y
por lo tanto se presupone su existencia o definición previa.”
(Santana, 2011)
1.3. Introducción:
visibilidad del código
12/10/2016 14
15. • Case sensitivity: distingue entre mayúsculas y
minúsculas.
• getwd() nos devuelve el directorio de trabajo y el
comando setwd() nos permite modificarlo.
setwd("C:/Users/Nerys Ramierz/Dropbox/Curso R")
• Guarda workspace modificado
save.image(“workspace1”)
12/10/2016 15
1.3. Introducción: directorio de trabajo
16. • Como apreciaron, en la interfaz tradicional los objetos
creados no se visualizan de la forma tradicional, tal como
sucede en programas como Excel, pero existen algunos
comandos iniciales que nos permites visualizarlos:
> myResults
[1] 7
> ls() #lista los objetos en memoria
> ls(pat=n) #listar objetos con algún característica
> rm(list=ls()) #Borra todos los objetos en memoria
12/10/2016 16
1.4. Introducción: visualizar objetos
17. • Muchas herramientas de R no están disponible directamente,
no obstante, podemos contar con ella mediante librerías. La
forma correcta de adherirlas al programa es:
Install.packeges(ggplot2)
library(ggplot2)
• Cada paquete, por lo general, tiene un archivo de ayuda que
permite estudiar sus funciones y utilidad.
12/10/2016 17
1.5. Introducción: paquetes
18. • En R encontrarás un menú de recursos, entre los cuales se
encuentran manuales, referencias y demás material para co
menzar a aprender R.
Ayuda sobre comandos Ayuda sobre temas
help(print)
help.search("print")
?print
??regression
help.search("regression")
• También puedes obtener ejemplos del uso de funciones con la
función, Con eso tendrás una idea de lo que puedes hacer con
esta función.
example("read.table")
args(sqrt)
12/10/2016 18
1.4. Introducción: ayuda
19. 1.4. Introducción:
Datos pre-instalados
• R dispone de bases de datos pre-instaladas que nos
permiten ir practicando en la medida que avanzamos.
El siguiente código, lista todas las bases pre-instaladas.
data(package=.packages(all.available=TRUE))
12/10/2016 19
20. 2. Tipos de objetos:
vectores y matrices
12/10/2016 20
En algún lugar de este apartado puedes necesitar saber usar los
operadores de R, en tal caso busca ayuda en el apartado 3.
21. 2.1. Tipos de objetos
• Los objetos se pueden clasificar en dos grupos:
– Atómicos: todos los elementos son del mismo tipo (vectores y
matrices)
– Recursivos: pueden combinar una colección de objetos
diferentes. (dataframe, listas)
• Todas las cosas que manipula R se llaman objetos. los mismo pueden
ser de diversos tipos y tener diferentes tipos de datos. En general,
éstos se construyen a partir de objetos más simples y se definen con
el operador de asignación (<-). Existen 5 tipos de objetos:
1. Caracteres (letras). Estas expresiones se denotan entre comillas.
2. Numéricos.
3. Interger. Es numérico, pero ocupa menos memorias.
4. Complex. Permite representar números complejos.
5. Logical.
12/10/2016 21
22. 1. Caracteres (letras). Estas expresiones se denotan entre
comillas. Es cualquier cadena de caracteres
alfanuméricos. Deben introducirse entre comillas (si ",
no “). Para convertir cualquier número en una caden
a de caracteres se utiliza el comando as.character().
x <- c("a", "b", "c")
class(x)
nombres<-c(“Maria”, “Jesus”)
12/10/2016 22
2.1. Tipos de objetos
23. 1. Numérico. Es el tipo de dato con mayor importancia.
El mismo permite almacenar vectores y matrices.
x <- c(1,2,3,4,5)
12/10/2016 23
2.1. Tipos de objetos
24. • Lógicos. También hay objetos lógicos (logic) que representan los
valores lógicos falso y verdadero. En R el valor falso se
representan por FALSE únicamente por la letra F mayúscula; de la
misma manera, el valor lógico verdadero es representado por la
instrucción TRUE (=1) o por la letra T.
• Permiten:
– Calcular proporciones
– Calcular dummys
– Indexar variables para acceder a posiciones de vectores
– Vectorizar operaciones
– …
12/10/2016 24
2.1. Tipos de objetos
25. • [Ejercicio 1.2.] crea una variable llamada ‘colores’ que contenga
un vector con las cadenas "rojo", "azul", "verde", "azul", "rojo", en
ese orden.
• [Ejercicio 1.3.] definido el vector x<-c(1,2,3,4,5) verifique
para que se utiliza la función class(x).
• [Ejercicio 1.4.] definido el vector lógico x<-c(T,T,F,F,T)
genera un vector numérico, utilizando la función as.numeric(x).
Identifique que valores son 1 y cuales 0.
Ejercicios de clases:
12/10/2016 25
27. 2.2. Vectores:
numéricos
• El vector es el objeto más simple en R, es una colección
ordenada de número. R puedes construir vectores más
largos usando la función c(). (todos sus elementos son
iguales)
c(2, 3, 5)
[1] 2 3 5
• La función c() sirve para concatenar varios elementos
del mismo tipo:
v <- c(8, 7, -3, 2, 182)
assign(“v", c(8, 7, -3, 2, 182))
12/10/2016 27
28. • Otra característica interesante de este lenguaje, es que permite dar
nombre y acceder por medio de ese nombre a los elementos
individuales de un vector.
frutas <- c(15, 100, 2, 30)
names(frutas) <- c("naranja", "pera", "manzana", "durazno")
> frutas["naranja"]
naranja
15
12/10/2016 28
2.2. Vectores:
numéricos con nombres
29. • [Ejercicio 1.5.] El número de clientes atendidos por un peluquero
durante la semana es 45,43,56,48,51, crea un vector llamado v y
asígnale un nombre a cada día registrado, iniciando por el lunes, luego
imprima los nombres:
> v <- c(45,43,56,48,51)
> names(v) <- c("Lun", "Mar", "Mie", "Jue", "Vie")
Lun Mar Mie Jue Vie
45 43 56 48 51
> names(v)
[1] "Lun" "Mar" "Mie" "Jue" "Vie"
12/10/2016 29
Ejercicios de clases:
30. 2.2. Vectores:
Secuencias y repeticiones
• Otra característica interesante de este lenguaje, es que permite dar
nombre realizar secuencias.
<-1:20 # del 1 al 20
a<-20:1 # del 20 al 1
a<-seq(1,20) #vector que vaya desde 1 a 20
a<-seq(1,20,by=2) # fijar intervalos de la secuencia
a<-seq(1,20,length=12) # fijar longitud de la secuencia
• La función rep sirve para generar repeticiones de objetos:
a<-1:5; a5<-rep(a,times=5) #repetir un vector n veces
a<-1:5; a5<-rep(a,each=5) #repetir cada elemento 5 veces
12/10/2016 30
31. • [Ejercicio 1.6.] Para que se ejecutan las siguientes líneas de
código:
1:10
[1] 1 2 3 4 5 6 7 8 9 10
> rep(1:4,2) #repetimos 1:4 dos veces.
[1] 1 2 3 4 1 2 3 4
> rep(1:4,each=2)
[1] 1 1 2 2 3 3 4 4 #intercalando el resultado.
12/10/2016 31
Ejercicios de clases:
32. • [Ejercicio 1.7.] Dispone de una serie de tiempo de frecuencia
mensual en el siguiente espacio temporal 1990-2000, estudias la
estacionalidad del mismo por tanto necesita crear las siguientes
secuencias:
a. Inserte el vector anios y meses asignando a cada mes un número
que sea igual al orden que ocupe (ene=1, feb=2,…).
b. *Cree una dummy llamada dic que sea igual a 1 if mes=diciembre
y cero el resto de los meses. (Pista: vectores lógicos pueden
ayudar)
c. *Cree otra dummy llamada ulttri que sea igual a 1 durante el
ultimo trimestre del año y 0 el resto de los años.
d. *Presente una matriz con todos los resutlados. [Pista: cbind]
12/10/2016 32
Ejercicios de clases:
34. 2.2. Vectores:
Funciones útiles
Utilizando el siguiente vector:
mi_vector <- c(2,5,8,6,7,9,10,15,-1,8)
pruebe las siguientes funciones:
max(x) Devuelve el elemento máximo del vector.
min(x) Devuelve el elemento mínimo del vector.
range(x) Devuelve el elemento mínimo y máximo del vector.
length(x) Devuelve la dimensión del vector.
sum(x) Devuelve la suma de todos los elementos.
prod(x) Devuelve el producto de todos los elementos.
sort(x, decreasing=T) Devuelve los elementos ordenados.
rank(x) [1] 2.0 el primer valor es el segundo más bajo,
las posiciones que ocupa cada elemento del vector.
diff(x) diferencias absolutas
Order(x) [1] 9 1 … el valor más bajo esta en la posición 9
12/10/2016 34
35. [Ejercicio 1.8.] Dado el vector x<-c(8,9,7,4,6,5,7,2,9,8,2,4,7,5):
- Calcular el número de elementos.
- Obtenga un vector de la diferencia absoluta del vector.
- En que posición se encuentra el valor mínimo.
- Ordena de menor a mayor.
[Ejercicio 1.9.] Cuales son las diferencias entre rank y order.
12/10/2016 35
Ejercicios de clases:
36. 2.2. Vectores:
Vector vacio
• De mucha utilidad cuando realizamos procedimientos recursivos
que luego necesitamos ir completando.
vv <- numeric()
• Nota: los vectores índices se ven más adelante.
12/10/2016 36
38. 2.3. Factores
• Los factores son otro tipo especial de vectores usados para representar
datos categóricos, éstos pueden ser ordenados o no. La impresión de
un factor muestra información ligeramente diferente a la de un vector
de caracteres. En particular, puedes notar que las comillas no son
mostradas y que los niveles son explícitamente impresos.
> x <- factor(c("Hombre","Mujer","Hombre","Hombre","Mujer"))
>x
[1] Hombre Mujer Hombre Hombre Mujer
Levels: Hombre Mujer
## tabla de frecuencia simple
>table(x)
x
Hombre Mujer
3 2
12/10/2016 38
39. 2.3. Factores ordinales
• Se puede asignar un orden para dar sentido ordinal a las variables
cualitativas. (DataCamp ejemplos).
temperature_vector <- c("High", "Low", "High","Low", "Medium")
factor_temperature_vector <- factor(temperature_vector,
order = TRUE,
levels = c("Low", "Medium", "High"))
factor_temperature_vector
[1] High Low High Low Medium
Levels: Low < Medium < High
12/10/2016 39
40. • [Ejercicio 1.13.] Contabilice, mediante una tabla de frecuencia, la
cantidad de a que existe en el siguiente factor [R.4]:
x<-factor(c(LETTERS[3:1], rep(LETTERS[1],2), LETTERS[1:1]))
> table(x)
x
A B C
4 1 1
• [Ejercicio 1.14.]* [Guarda resultados] Guarde el número de “A” en un
vector llamado tragabala y luego multiplíquelo por dos:
> tragabala<-table(x)[1]
> tragabala*2
A
8
12/10/2016 40
Ejercicios de clases:
42. 2.4. Matrices
• Desde el punto de vista del lenguaje, una matriz es un vector con
un atributo adicional. Existen diversas maneras de generar una
matriz:
> A = matrix(
+ c(2, 4, 3, 1, 5, 7), # the data elements
+ nrow=2, # number of rows
+ ncol=3, # number of columns
+ byrow = TRUE) # fill matrix by rows
x<-matrix(1:12,4,3) matrix(1:12, nrow=4, ncol=3)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
12/10/2016 42
43. • Los datos en R se van rellenando columna a columna de
izquierda da derecha. Aunque también se puede
especificar el orden deseado.
matrix(1:12, nrow=4, ncol=3,
byrow=TRUE)
matrix(1:12, nrow=4, ncol=3,
byrow=FALSE)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
12/10/2016 43
2.4. Matrices:
byrow
44. 2.4. Matrices:
nombres de filas y columnas
• A las matrices creadas podemos crear nombre y luego
acceder a sus elementos a partir de los nombres creado, las
funciones para realizar es tarea son colnames y rownames:
12/10/2016 44
x<-matrix(1:12,4,3)
>x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
colnames(x)<-c("edad","peso","altura")
rownames(x)<-c("Perla","Carlos","Eva","Alex")
> x
edad peso altura
Perla 1 5 9
Carlos 2 6 10
Eva 3 7 11
Alex 4 8 12
45. • Se pueden combinar matrices de distintas manera,
según lo deseado, sea por filas o columnas, usando las
funciones rbind() y cbind().
x<-matrix(1:12,4,3)
rbind(x, c(1,2,3)) cbind(x, c(1,2,3,4))
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
[5,] 1 2 3
[,1] [,2] [,3] [,4]
[1,] 1 5 9 1
[2,] 2 6 10 2
[3,] 3 7 11 3
[4,] 4 8 12 4
12/10/2016 45
2.4. Matrices:
agregar filas y columnas
Útil para guardar resultados secuenciales.
46. nrow(x), Averiguar el número de filas
ncol(x), Averiguar el número de columnas
dim(M), dimension de una matriz
rowSums()
colSums()
% _ %, Multiplicar matrices
t(x), transponer
solve(x), Invertirlas
diag(x), Utilizar la diagonal
12/10/2016 46
2.4. Matrices:
Funciones útiles
Prueba algunas de las funciones con el ejercicio 1
47. • [Ejercicio 1.15.] Dada la siguiente matriz:
datos<-matrix(c(20,65,174,22,70,180,19,68,170),nrow=3,byrow=T)
dimnames(datos)<-list(c("paco","pepe","kiko"),
c("edad","peso","altura"))
> datos
edad peso altura
paco 20 65 174
pepe 22 70 180
kiko 19 68 170
Agrega los datos de feliz (edad=18; peso=81; altura=182) e imprima
los resultados en la consola de R.
feliz<-c(18,81,182)
datos<-rbind(datos,feliz)
12/10/2016 47
Ejercicios de clases:
Tomada de: http://halweb.uc3m.es/esp/Personal/personas/jmmarin/esp/ManualR/intro_estructurasdedatos.html
48. • [Ejercicio 1.16.] Anide las funciones diag y sum para calcula la traza de la
matriz [my_matriz<-matrix(9,3,3)]
my_matriz<-matrix(9,3,3)
sum(diag(my_matriz))
[1] 27
12/10/2016 48
Ejercicios de clases:
49. • [Ejercicio 1.16.] [Tomado de Coursera, curso de programación en
Matlab] Dado un vector x<-c(1:5), crea una matriz donde la primera
columna contenga los elementos de x, la segunda x^2 y la tercera x^3.
x<-c(1:3)
cbind(x,x^2,x^3)
x
[1,] 1 1 1
[2,] 2 4 8
[3,] 3 9 27
• [Ejercicio 1.17.]* Realiza el ejercicio anterior con un bucle for.
[Pista, codigo Matlab].
for i=1:3
A(:,i)=v.^i;
end
12/10/2016 49
Ejercicios de clases:
*Anímate a obtener la diagonal principal
de la matrix, mediante la función diag(),
Puedes obtenerla sin la función y sin
bucles?
(1:3)^(1:3)
50. • El comando data.entry() permite visualizar una serie de
datos en forma de hoja de calculo.
x<-c(1:3)
y<-cbind(x,x^2,x^3)
data.entry(y)
12/10/2016 50
2.4. Matrices:
Data.entrys
52. • Los data frames nos permiten visualizar datos de diferentes
formatos, tal como lo conocemos en formato Excel o SPSS.
– Los componentes deben ser vectores (numéricos, carácter o
lógicos).
– La longitud de los vectores deben ser la misma.
nota<-c(80,98,67,74)
nombre<-c("Pedro", "Manuel", "Arix","Vianca")
data.frame(nombre, nota, aprobado=nota>70)
nombre nota aprobado
1 Pedro 80 TRUE
2 Manuel 98 TRUE
3 Arix 67 FALSE
4 Vianca 74 TRUE
12/10/2016 52
2.5. Data Frames
53. • [Ejercicio 1.17.] Inserte en R un data frame con la siguiente estructura:
peso <- c(50,70,45,80,72)
altura <- c(160,165,180,190,175)
edad <- c(20,40,41,31,33)
nombres <- c("Lorena","Manolo","Carmen","Luis","Sara")
sexo <- c("M","H","M","H","M")
datos <- data.frame(nombres,sexo,peso,altura,edad)
datos
nombres sexo peso altura edad
1 Lorena M 50 160 20
2 Manolo H 70 165 40
3 Carmen M 45 180 41
4 Luis H 80 190 31
5 Sara M 72 175 33
12/10/2016 53
Ejercicios de clases:
54. • Podemos importar los data.frame desde archivos
planos como un txt. Esta es otra forma habitual de
cargar dato en R que estén en formato .txt es:
datos<- read.table(file="datos.txt", header=TRUE)
Nota: Recuerde que si solo coloca el nombre del archivo, acedará al directorio de
trabajo en que este trabajando R, en otro caso debe colocar la dirección
completa.
12/10/2016 54
2.5. Data Frames
Importar archivos planos (.txt)
55. 2.6. Acceso a porciones
o subconjuntos de datos y resultados
12/10/2016 55
56. 2.6. Vectores índice
• R permite acceder a un elemento de un vector añadiendo el nombre
de un vector en un índice entre corchetes []. El vector índice, indica
parte de otro vector y puede ser de tres tipos:
– Vector de números enteros: son números inter, en caso de ser
positivos son concatenados y en caso de ser negativos son omitidos.
No hace falta sea de igual longitud al vector seleccionado.
– Vector lógico: los valores correspondientes a TRUE son seleccionados,
ambos vectores deben ser de igual longitud.
– Vector de nombres: solo se aplica cuando el vector tiene el atributo
name.
12/10/2016 56
57. • Una vez creado un vector se pueden obtener diversos resultados y ver
qué clase de elementos está contenida en el vector. En el siguiente
comando se pueden ver algunos ejemplos.
# Operaciones con elementos
v[4]+v[2]
# Guardar los resultados en una posición
v[1] <- v[2] - v[5]
# Del primer al quinto elemento
v[1:5]
• El acceso a los elementos individuales de un vector no solamente es
para consulta o lectura, sino también para su modificación o escritura.
12/10/2016 57
2.6. Vectores índice:
Ejemplos con vectores
v<-c(12,13,18,-2,1.8,9,3,4,5,8,9,6,5,4)
v[5] # El quinto elemento
v[-5] # Todos los elementos, menos el quinto
58. • para quedarnos con todos los elementos de x salvo los 3 primeros.
x[-(1:3)]
– También podemos accedeer a posiciones especificas
x[c(1,3,7)]
12/10/2016 58
2.6. Vectores índice:
Ejemplos con vectores
59. • [Ejercicio 1.18.] Dado el siguiente vector de edades:
edad <- c(20,40,23,41,31,33,54,8,22)
12/10/2016 59
Ejercicios de clases:
a) Utilice la indexación de vectores para acceder a la edad colocada en
la tercera posición.
b) Obtenga las tres primeras posiciones de dos formas diferentes.
c) Sume la primera y la última posición.
d) Repite el ejercicio d anidando la función length().
> edad[3] #a
[1] 23
> edad[1:3] #b.1
[1] 20 40 23
> edad[c(1,2,3)] #b.2
[1] 20 40 23
> edad[1]+edad[9] #c
[1] 42
> edad[1]+edad[length(edad)] #d
[1] 42
60. • Selección de elementos de acuerdo con una condición: índice lógico o
indexación (ver sección siguiente para tipos de operadores).
v<-c(-4:2,1:3,8:1)
[1] -4 -3 -2 -1 0 1 2 1 2 3 8 7 6 5 4 3 2 1
v < 0 # [1] TRUE TRUE TRUE
v[v < 0] # [1] -4 -3 -2 -1
# negacion lógica, con el operador !
v[!(v < 0)]
v[v >= 0]
Fmes.nacimiento == "Mar“
x <- c("a", "b", "c", "d")
x[x < "d"]
12/10/2016 60
2.6. Vectores índice:
valores lógicos
61. • [Ejercicio 1.19.] Dado un vector de números enteros:
my_vector<-c(1:10)
a) Crea un nuevo vector llamado neno, con todos los valores superiores a 5.
b) Utilice la indexación lógica para obtener los impares de dicho vector.
c) Ahora obtenga todos los impares entre 4 y 7.
> my_vector[my_vector>5]
[1] 6 7 8 9 10
> my_vector[c(T,F)]
[1] 1 3 5 7 9
> my_vector[4:7][c(F,T)]
[1] 5 7
12/10/2016 61
Ejercicios de clases:
62. • [Ejercicio 1.20.] Dado un vector irregular:
my_vector<-c(2,4,8,9,5,1,4,8,3,7,8,1,9,6)
a) Crea un nuevo vector llamado neno, con todos los valores superiores a 5.
b) Utilice la indexación para obtener los impares de dicho vector (p. residuo).
c) Utilice la indexación para obtener las coordenadas impares de dicho vector.
> my_vector[my_vector>5]
[1] 6 7 8 9 10
> my_vector[my_vector%%2!=0]
[1] 9 5 1 3 7 1 9
> which(my_vector%%2!=0)
[1] 4 5 6 9 10 12 13
12/10/2016 62
Ejercicios de clases:
63. • [Ejercicio 1.21.]* Dado un vector de números:
x<-c(0,7,8,7)
comente los siguientes comandos:
x[x!=0]
(x+1)[x!=0]
(x+1)[1:2][x!=0]
(x)[x!=0 | x=7] #detecta el error
(x[2:length(x)]-x[1:(length(x)-1)])/x[1:(length(x)-1)]
12/10/2016 63
Ejercicios de clases:
64. 2.2. Vectores índice:
Funciones which
Esta función es sumamente útil, te indica la posición del vector donde se
encuentra una numero determinado [ver también which.min()
which.max()]. Fijense que no accedemos directamente a una posición,
sino que desconocemos el índice y deseamos acceder a partir de una
característica determinada.
> mi_vector <- c(2,5,8,6,7,9,10,15,-1,8)
> which(mi_vector==2)
[1] 1
También ponemos componer esta función:
> which(mi_vector==max(mi_vector))
[1] 8
Ejemplo
aplicado: en los
modelos
factoriales
donde
buscamos el
Máx{R2}.
12/10/2016 64
65. • [Ejercicio 1.10.] Dado el siguiente vector votos_ocoa <-c(12356,
11231, 15675), referidos a la cantidad de votos de los partidos 1, 2 y 3,
respectivamente, utilice la función which para determinar el partido
vencedor. (pista: puedes usar ==max(x) ) y selecciones los valores superior
a su media.
> votos_ocoa <-c(12356, 11231, 15675)
> which(votos_ocoa==max(votos_ocoa))
[1] 3
which(votos_ocoa==(votos_ocoa>mean(votos_ocoa)
• [Ejercicio 1.11.]* Suponga que en vez de número, tienes el partido “a”, “b”
y “c”, y en vez de números desea obtener el nombre del partido vencedor.
[crea primero un vector de nombres]
# creo un vector de nombres
> nombres<-c("a","b","c")
> nombres[which(votos_ocoa==max(votos_ocoa ))]
[1] "c"
12/10/2016 65
Ejercicios de clases:
66. • [Ejercicio 1.12.]* Suponga ha obtenido los datos de azua
[votos_azua <-c(16356, 14231, 9675)] y bani [votos_bani <-c(6356, 4231,
975)], por tanto ahora obtiene una matriz de datos y necesita saber
el partido que gano en cada provincia: como lo harías?
> result<-numeric()
> for (i in 1:3){
+ result[i]<nombres[which(votosProvin[,i]==max(votosProvin[,i]))]
+ }
> result
[1] "c" "a" "a"
12/10/2016 66
Ejercicios de clases (motivar bucles):
67. • En caso de una matriz bidimensional se puede especificar x[nfila,ncol],
indicando la ubicación tanto de la fila como de la columna.
> my_matrix <- matrix(1:12, nrow = 3, ncol = 4)
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
#Obtener el elemento de la fila 2, columna 3
> my_matrix[2,3]
[1] 8
#Llamar todos los elementos de la fila 2
> my_matrix[2,]
[1] 2 5 8 11
12/10/2016 67
2.6. Vectores índice:
matrices
68. • También podemos eliminar filas o columnas de una
matriz mediante la indexación:
> m[2, ,drop=F]
[,1] [,2] [,3] [,4]
[1,] 2 5 8 11
12/10/2016 68
2.6. Vectores índice:
matrices
69. • [Ejercicio 1.22.]* [Tomado de coursera]Dada la matriz:
my_mat<- matrix(12:1,3,4)
a) Obtenga una matriz [2x2] con los elementos de la esquina superior izquierda.
b) Obtenga una matriz [2x2] con los elementos de la esquina superior derecha.
c) Obtenga una matriz [2x2] con los elementos de la esquina inferior derecha.
d) Como transformaría el inciso #c para que sea estándar para cualquier matriz?
#a
> my_mat[1:2,1:2]
#b
my_mat[1:2,3:4]
#c
my_mat[(3-2+1):3,(4-2+1):4]
12/10/2016 69
Ejercicios de clases:
70. • [Ejercicio 1.23.]* [Tomado del curso Introducción a la programación en
Matlab] Dada una matriz:
my_mat<- matrix(1:12,3,4)
devuelve devuelve una matriz que contiene sólo los elementos de my_mat
que se encuentran en filas y columnas impares. Es decir, en las
coordenadas (1,1)(3,1)… que no esten ni en filas, ni en columnas pares.
my_mat[c(T,F), c(T,F)]
[,1] [,2]
[1,] 1 7
[2,] 3 9
• [Ejercicio 1.24.]* Intentelo con el operador colon o el comando seq. [R.
my_mat[seq(1,3,2), seq(1,4,2)]
12/10/2016 70
Ejercicios de clases:
71. • Cuando se trabaja con data.frame, se puede acceder a
sus subconjuntos, usando el símbolo de $, a su
izquierda se coloca el nombre de la lista y a la derecha.
> x <- data.frame(elia=rnorm(4,mean=0,sd=4), coco=c(T, T, F, F))
x
elia coco
1 -6.5209647 TRUE
2 1.6486238 TRUE
3 7.5228359 FALSE
4 0.2848676 FALSE
> x$elia
[1] 5.588611 -1.428934 -3.683146 3.452413
12/10/2016 71
2.6. Vectores índice:
Data.frame $
72. • Es incontable la cantidad de ocasiones en que necesitamso guardar
nuestros resultados en alguna matriz de datos dinal, que exportamos a
Excel para poder la presentación final de nuestros datos. (en la sección
de bucles es importante esto quede claro).
> summary(mtcars$mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.42 19.20 20.09 22.80 33.90
> summary(mtcars$mpg)[1]
Min.
10.4
> summary(mtcars$mpg)[2]
1st Qu.
15.42
> summary(mtcars$mpg)[3]
Median
19.2
12/10/2016 72
2.6. Vectores índice:
Funciones
73. • En muchisimos casos necesitamos acceder a una parte de los
resutlados de alguna función, aquí ilustramos un ejemplo usando la
base de datos mtcars.
# Estudia brevemente la base de datos
mtcars
help(mtcars)
# podemos estimar el modelo de regresión simple (utilizando lm)
> lm(mtcars$mpg ~ mtcars$drat)
Call:
lm(formula = mtcars$mpg ~ mtcars$drat)
Coefficients:
(Intercept) mtcars$drat
-7.525 7.678
12/10/2016 73
2.6. Vectores índice:
Un ejemplo con el modelo de regresión (1)
74. • Es incontable la cantidad de ocasiones en que necesitamso guardar
nuestros resultados en alguna matriz de datos dinal, que exportamos a
Excel para poder la presentación final de nuestros datos. (en la sección
de bucles es importante esto quede claro).
> summary(mtcars$mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.42 19.20 20.09 22.80 33.90
> summary(mtcars$mpg)[1]
Min.
10.4
> summary(mtcars$mpg)[2]
1st Qu.
15.42
> summary(mtcars$mpg)[3]
Median
19.2
12/10/2016 74
2.6. Vectores índice:
Ejemplos con funciones
75. # Puede darse en caso que necesitemos nos implima más resultados
> myresult<-lm(mtcars$mpg ~ mtcars$drat)
> summary(myresult)
Call:
lm(formula = mtcars$mpg ~ mtcars$drat)
Residuals:
Min 1Q Median 3Q Max
-9.0775 -2.6803 -0.2095 2.2976 9.0225
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -7.525 5.477 -1.374 0.18
mtcars$drat 7.678 1.507 5.096 1.78e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.485 on 30 degrees of freedom
Multiple R-squared: 0.464, Adjusted R-squared: 0.4461
F-statistic: 25.97 on 1 and 30 DF, p-value: 1.776e-05
12/10/2016 75
2.6. Vectores índice:
Un ejemplo con el modelo de regresión (2)
76. # O necesitamos acceder algún elemento de la
estimación para un test de hipotesis adicional o
graficar los residuales.
> myresult<-lm(mtcars$mpg ~ mtcars$drat)
> summary(myresult)
> summary(myresult)$r.squared
#acceder mediante funciones
resid(myresult)
#acceder mediante indexación
Myresult[2]
#ver los atributos
attributes(summary(lm(ind_ipcddom ~ var_depent)))
12/10/2016 76
2.6. Vectores índice:
Un ejemplo con el modelo de regresión (3)
79. 3.0. Operadores en R
• En resumen, tenemos tres tipos de operadores:
Aritméticos Comparativos Lógicos
+ Suma == igualdad & Y lógico
- Resta != Diferente de ! No lógico
* Multiplicación < Menor que | O lógico
/ División > Mayor que all
^ Potencia <= Menor o igual any
%% residuo >= Mayor o igual
%in% igual grupos
%like%
igualdad no exacta
12/10/2016 79
81. 3.1. Operadores en R:
Operadores aritmético
• Las operaciones aritméticas permiten realizar operaciones
del mismo nombre sobre matrices, vectores o data frames.
`+`suma # v <- 2 + 3
`-`resta # v <- c(2, 3) - c(5, 1)
`/`división
`*`multiplicación
`^`potencia'
sqrt() raíz cuadrada # v <- c(9, 8, 31)
abs() valor absoluto
Nota: Si los dos vectores son de diferente tamaño, R repetirá la secuencia
más pequeña múltiples veces. (> c(1,2,3,4)-c(1,2))
12/10/2016 81
82. • [Ejercicio 1.25.] Tenemos 530 monedas de 1 centavo; 1 centavo,
265 de 5 centavos, 80 de 10 centavos, y 80 de 25 centavos,
calcular la cantidad de dólares que tenemos:
> 530*(1/100)+265*(1/20)+80*(1/10)+80*(1/4)
[1] 46.55
a) En muchos casos es preferible utilizar la notación matricial, que facilita
bastante le calculo y resume los resultados.
> c(530,265,80,80)%*%c(1/100,5/100,10/100,25/100)
[,1]
[1,] 46.55
12/10/2016 82
Ejercicios de clases:
86. • En el caso de estos operadores, permiten agrupar operadores
relacionales.
`&` and | or
12/10/2016 86
3.3. Operadores en R:
Operadores lógicos
87. • [Ejercicio 1.26.] Dado un vector: x<-c(7,8,1,8,9,5,6,4,8,9,10), utiliza
algún operador lógico que te permita conocer el total de los elementos
comprendidos entre 3 y 7:
sum((3 <= x & x <= 7))
[1] 4
a. Obtenga un vector llamado el_brother, lógico =TRUE cuando el elemento
correspondiente al vector x este comprendido entre 3 y 7.
el_brother<-(3 <= x & x <= 7)
el_brother
[1] TRUE FALSE FALSE FALSE FALSE TRUE TRUE...
• [Ejercicio 1.27.] Estudie la diferencia entre los siguientes comandos:
(3 <= x & x <= 7)
x[(3 <= x & x <= 7)]
12/10/2016 87
Ejercicios de clases:
89. • [Ejercicio 1.28.] Dado un vector nombres<-c("Pedro", "María", "Julia",
"Marcos", "Anna"), crea un vector llamado sexo de la personas, este
vector contiene los caracteres "H" y "M" según sea hombre o mujer.
Posteriormente utilice este vector para llamar a los varones del vector
nombre.
sexo <-c("H","M","M","H","M")
nombres[sexo=="H"]
[1] "Pedro" "Marcos“
• [Ejercicio 1.29.]* Utilice la indexación lógica para determinar el
porcentaje de hombres en su vector:
> mean(sexo=="H")
[1] 0.4
12/10/2016 89
Ejercicios de clases:
91. • El operador Colon permite vectorizar operaciones y evitar
realizar operaciones. Los dos puntos (:) es el operador para
crear secuencias de forma que:
x <- 1:10
[1] 1 2 3 4 5 6 7 8 9 10
• La c puede utilizar para concatenar cosas e incluir diferentes
elementos en un vector.
2^(3:1)
2^((1:10)[c(F,T)])
12/10/2016 91
3.4. Operadores en R:
Operador colon
92. • Esta característica permite resumir códigos. El próximo
ejemplo se ilustra cómo usar vectores naturalmente para
realizar operaciones comunes.
y <- 1:5; x <- 6:10
y/x
[1] 0.1666667 0.2857143 0.3750000 0.4444444 0.5000000
12/10/2016 92
3.4. Operadores en R:
Operador colon
93. • [Ejercicio 1.30.] Hemos visto diferentes formas de definir vectores con R.
Supongamos que queremos definir el vector x = (1, 2, 3, 4, 5). Comprueba que
las siguientes formas son equivalentes.
x<-c(1,2,3,4,5) ; x<-1:5 ; x<-seq(1,5)
• [Ejercicio 1.31.] Dado un vector x <- c(11,13,16,15,15,18), utiliza la
vectorización para calcular la primera diferencia y la tasa de crecimiento
(discreta) de dicho vector.
> (x[2:6]-x[1:5])
> (x[2:6]-x[1:5])/x[1:5]
[1] 0.1818182 0.2307692 -0.0625000 0.0000000 0.2000000
• [Ejercicio 1.32.] Define el vector y <- (1, 3, 5, 7) utilizando la
función c(). ¿Cómo lo harías con la función seq()?. Recuerda que si tienes
alguna duda sobre cómo se definen las funciones siempre puedes consultar la
ayuda.
> y<-c(1, 3, 5, 7)
seq(from = 1, to = 7, by = 2)
12/10/2016 93
Ejercicios de clases:
94. • [Ejercicio 1.33.]* [Tomado de Coursera, curso de programación en
Matlab] Dado un entero positivo n, escriba un código que regrese la
media [utilice mean()] del cuadrado de los n enteros. si n es 5, tiene que
calcular el promedio de los números 1, 4, 9, 16 y 25:
> n<-5
mean((1:n)^2)
[1] 11
12/10/2016 94
Ejercicios de clases:
96. • En muchas ocasiones necesitamos acceder a las
posiciones que se encuentran entre ciertas posiciones
(piense en los momentos acotados). En tales casos
se utiliza el operador, %in%, el mismo verifica si i un
cierto elemento de nuestro vector es igual a los
elementos de un conjunto representado por un vector.
n <- c(0,2,1,3,5,4,2,1,0,5)
(n %in% c(0,1))
[1] TRUE FALSE TRUE FALSE FALSE ...
12/10/2016 96
3.5. Operadores especiales en R:
%in%
97. • [Ejercicio 1.34.] Dado un vector: x<-c(7,8,1,8,9,5,3,4,8,7,10).
a) utiliza algún operador lógico que te permita conocer el total de los elementos
iguales a 3 o 7.
b) Obtenga un vector x2 donde remplace por 0 los elementos del vector x
iguales a 3 o 7.
#a
sum((x %in% c(3,7)))
[1] 3
#b
> x[x %in% c(3,7)]<-0
> x
[1] 0 8 1 8 9 5 0 4 8 0 10
12/10/2016 97
Ejercicios de clases:
100. 4.1. Adicionales:
Paste
> paste(c("q"), 1:4, sep="")
[1] "q1" "q2" "q3" "q4"
> paste(c("q"), 1:4, sep="-")
[1] "q-1" "q-2" "q-3" "q-4«
> paste(1:5, collapse = "")
[1] "12345"
final, cada argumento original se separa del siguiente por un espacio
en blanco, aunque ello puede cambiarse utilizando el
argumento sep="cadena", que sustituye el espacio en blanco por
cadena, la cual podría ser incluso vacía.
12/10/2016 100
101. Ejercicios
• [Ejercicio] A la secuencia de números realizada anteriormente ha
decidido colocarle el trimestre al que corresponde cada mes,
obteniendo el siguiente resultado, modifique el código de forma que los
quintiles aparezcan de forma correcta y luego imprima los resultados.
> datos<-cbind(anios, mes, dic, ultri)
> quintiles<-paste(c("q"), 1:4, sep="")
> data.frame(datos, quintiles)
quintiles<-rep(paste(c("q"), 1:4, sep=""), each=3)
12/10/2016 101
102. • Es un operador de igualdad parcial:
> clrs <- c("blue", "black", "brown", "beige", "berry", "bronze",
"blue-green", "blueberry")
> dfx = data.frame(Velocity=sample(100, 8), Colors=clrs)
> dfx
Velocity Colors
1 67 blue
2 52 black
3 55 brown
4 65 beige
5 87 berry
6 27 bronze
7 69 blue-green
8 43 blueberry
> ndx <- grep('^be.*?' , dfx$Colors, perl=T)
> dfx[ndx,]
12/10/2016 102
4.1. Operadores especiales
%like% | grep
Tomado de: http://stackoverflow.com/questions/3539826/whats-the-r-equivalent-of-sqls-like-description-statement
* 0 o más carac…
+ 1 o más carac…
103. > # solo que tenga la w
> ndx <- grep"[f-k]", dfx$Colors, perl=T)
> dfx[ndx,]
Velocity Colors
2 52 black
4 65 beige
7 69 blue-green
> # solo que tenga la w
> ndx <- grep"[w]", dfx$Colors, perl=T)
> dfx[ndx,]
Velocity Colors
3 55 brown
> # solo aquella que tenga un guión
> dfx[grep("[-]" , dfx$Colors, perl=T), ]
Velocity Colors
7 69 blue-green
12/10/2016 103
4.1. Operadores especiales:
%like% | grep
"^[a-c].*" #empieza
con una letra de la
“a” a la “c”
104. • También podemos utilizar la función con valores:
> el_panita<-c(8057,8546,4586,5698,4065)
> grep,1:10)
> grep(4,el_panita)
[1] 2 3 5
> el_panita[ grep(4,el_panita)]
[1] 8546 4586 4065
> el_panita[grep("^4.*",el_panita)]
[1] 4586 4065
> el_panita[grep("8$",el_panita)]
[1] 5698 #$ para terminado en.
12/10/2016 104
3.5. Operadores especiales en R:
%like% | grep valores
105. • Esta función permite cambiar los valores contenido en
un objeto de carácter cadena, la sintaxis de la función es
la siguiente:
chartr(old, new, x)
> chartr("a","A", "tragabala")
[1] "trAgAbAlA“
#ojo, las letras no se consideran conjunta
> > chartr("al","AL", "tragabala")
[1] "trAgAbALA"
12/10/2016 105
4.1. Traslación de caracteres:
chartr()
108. 4.1. Valores perdidos
• R indica los valores desconocidos (missing) mediante el valor
NA.
• La función is.as() permite saber si un vector tiene
valores desconocidos
> is.na(c(1:3, NA, 10, 11, NA))
[1] FALSE FALSE FALSE TRUE FALSE FALSE TRUE
#toma solo los valores
vector<-c(1:3, NA, 10, 11, NA)
vector[!is.na(c(1:3, NA, 10, 11, NA))]
12/10/2016 108
109. • [Ejercicio 1.36.] Utiliza alguna función que te permita
contabilizar el número de valores perdidos en el vector x<-
c(1:4, NA, NA, 10, NA).
sum(is.na(x))
[1] 3
#Alt. 2
sum(x, na.rm = TRUE)
• [Ejercicio 1.37.] Utilice la indexación lógica para a partir de un
vector que identifique los valores perdidos, elimines los datos
faltantes en el vector x<-c(1:4, NA, NA, 10, NA).
> x[!is.na(x)]
[1] 1 2 3 4 10
12/10/2016 109
Ejercicios de clases:
110. • [Ejercicio 1.38.] Dado el vector:
V1<-c(NA,2.1,1.4,NA,6,3.5,8, rep(NA, times=8))
Utilice la función as.na() para contar la cantidad de valores
perdidos que se encuentran en el vector, luego elimine los na del
vector.
V1<-c(NA,2.1,1.4,NA,6,3.5,8, rep(NA, times=8))
is.na(v1)
> v1[is.na(v1) == F]
[1] 2.1 1.4 6.0 3.5 8.0
12/10/2016 110
Ejercicios de clases:
111. 4.2. Valores perdidos:
Data.frame
• Cuando trabajamos con bases de datos, también podemos
dejar de considerar las filas donde se presenta algún dato
faltante, por ejemplo:
> airquality[1:6,]
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> airquality[complete.cases(airquality),][1:6,]
12/10/2016 111
114. • Orden de importancia de mayor a menor
- Funciones y expresiones agrupadas
- Operaciones indexadas
- Aritméticas
- Comparación
- Formulas
- Asignación
- Ayuda
12/10/2016 114
4.2. Adicionales:
precedencia
116. 4.2. Adicionales:
Exportar a Excel
• Por último, muchas veces completar la automatización de tareas
requieres exportar nuestros resultados a Excel. En R dicho
procedimiento se puede realizar mediante la siguiente línea de
código:
save(prueba, file="datanew.rda") #guardamos format.R
write.csv(prueba, file="datanew.csv") #guardamos CSV
• Para guardarlo directamente en Excel usaremos el paquete xlsReadWrite
install.packages("xlsReadWrite")
library(xlsReadWrite)
paquetewrite.xls(prueba,file="datanew.xls",sheet=“sheet1")
12/10/2016 116
117. 4.2. Adicionales:
Exportar a pdf
# Doy un nombre al archivo que contendrá el "output" en .pdf
pdf(“Nerys_hist.pdf")
# Genero 20,000 números normales y hago un histograma
hist(rnorm(20000))
# Cierro el archivo
dev.off()
12/10/2016 117
119. Referencias
• Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth &
Brooks/Cole.
• Bravo, F. “Análisis exploratorio en R”. 2013
• Conesa, D. 2013: “Curso introduccion R”. Universidad de Valencia, Dept. de estadística e
investigación operativa. Valencia, España.
(http://www.uv.es/conesa/CursoR/material/handout-sesion2.pdf)
• Contreras J.M., Molina E. y Arteaga P. “Introducción a la programación estadística con R”
• Dalgaard, P. “Introductory Statistics with R”. Second Edition. University of Copenhagen. 2008
• Matloff, N. “The Art of R Programming”. 2009
• Narayanachar, P.; Ramaiah, S and Manjunath, B.G. “A course in Statistics with R”. Wiley. This
edition first published 2016
• Santana (2013). “El Arte de Programar en R”
12/10/2016 119