Professional Documents
Culture Documents
M. Vargas Jimenez
2012/02/11
Indice general
1. Introducci
on al paquete estadstico R. Manipulaci
on
tos. Archivos. Gr
aficos. Tablas.
1.1. Introduccion a R . . . . . . . . . . . . . . . . . . . . .
1.1.1. Instalacion de R . . . . . . . . . . . . . . . . . .
1.1.2. Conceptos generales sobre R . . . . . . . . . . .
1.1.3. Sesion inicial . . . . . . . . . . . . . . . . . . .
1.2. Objetos en R . . . . . . . . . . . . . . . . . . . . . . .
1.2.1. Vectores . . . . . . . . . . . . . . . . . . . . . .
1.2.2. Matrices y arrays . . . . . . . . . . . . . . . . .
1.2.3. Data.frames . . . . . . . . . . . . . . . . . . . .
1.2.4. Listas . . . . . . . . . . . . . . . . . . . . . . .
1.3. Lectura de archivos de datos . . . . . . . . . . . . . . .
1.3.1. Lectura de archivos con read.table() . . . . . . .
1.3.2. Lectura de archivos de amplitud fija . . . . . . .
1.3.3. Lectura con scan() . . . . . . . . . . . . . . . .
1.3.4. Carga de objetos desde el archivo... . . . . . . .
1.3.5. Lectura de archivo con sintaxis ... . . . . . . . .
1.4. Escritura de archivos . . . . . . . . . . . . . . . . . . .
1.4.1. Guardar data.frames en archivos . . . . . . . .
1.4.2. Guardar objetos que estan en memoria . . . . .
1.5. Tratamiento de valores missing . . . . . . . . . . . . .
1.5.1. Chequeo de valores missing . . . . . . . . . . .
1.5.2. Sustituye por missing los valores ... . . . . . . .
1.5.3. Quitar los valores que son missing . . . . . . . .
1.5.4. Sustitucion de NA por ... . . . . . . . . . . . . .
1.5.5. Uso de funciones para manipular... . . . . . . .
1.6. Practicas propuestas: Creacion y... . . . . . . . . . . . .
de da.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
6
6
8
10
19
24
43
45
45
47
47
48
48
48
48
49
49
49
49
50
50
51
51
INDICE GENERAL
Captulo 1
Introducci
on al paquete
estadstico R. Manipulaci
on de
datos. Archivos. Gr
aficos.
Tablas.
1.1.
Introducci
on a R
1.1.1.
Instalaci
on de R
Instale la u
ltima version del package base de R que se encuentra en la
pagina de R
http://cran.r-project.org/bin/windows/base/
1.1.2.
1.1.3.
Sesi
on inicial
AR
1.1. INTRODUCCION
setwd("C:\\MisDatos\\Datos")
9 10 11 12 13 14 15
Para mas informacion sobre cualquier funcion de las usadas puede usarse
la funcion ayuda que proporciona R.
Ejemplo
>help(":") # R proporciona ayuda sobre lo que hace el operador :
>help(matrix)
>?matrix # R proporciona ayuda sobre lo que hace la funci
on matrix
>?rnorm
>?getwd
1.2.
Objetos en R
Casi todo lo que maneja R son objetos. Entender su estructura y propiedades nos ayudara a manipularlos evitando errores. Podemos cargar informacion
en objetos con nombre.
Ejemplo
Creamos un objeto numerico y otro de tipo caracter
> a=25
> b="Edad"
son objetos que contienen los valores 25 y Edad. Para visualizar su contenido,
basta escribir su nombre en la R Console y pular ENTER.
En una sesion los objetos creados se encuentran en el entorno denominado
1.2. OBJETOS EN R
> a
[1] 25
> b
[1] "Edad"
La funcion ls() permite listar los objetos que hay cargados en el area de
trabajo.
Ejemplo
> ls()
[1] "a"
"a1"
"a2"
"a3"
"b"
"chi"
"d"
[13] "d6"
"datos"
"dd"
"dtf"
"Edad"
"Edad2"
"Edadf"
[25] "l4"
"m1"
"m2"
"ma"
"nv1"
"nx"
"ordenc
[37] "v2"
"v3"
"vect"
"x"
"X"
"X2"
"X3"
"a2"
"a3"
"chi"
"d"
"d0"
"d1"
[13] "dd"
"dtf"
"Edad"
"Edad2"
"Edadf"
"fv1"
"fv2"
[25] "m2"
"ma"
"nv1"
"nx"
"ordencuan" "pt2"
"t"
[37] "vect"
"x"
"X"
"X2"
"X3"
"Y"
"y"
1.2.1.
Vectores
Los vectores estan formados por elementos del mismo tipo. La funcion c()
permite concatenar los elementos que forman el vector.
Ejemplo
> v1=c(1,3,7) # vector de 3 valores num
ericos
> v2=c("a","b","c","d")# vector concatenaci
on de 4 caracteres
> v1
[1] 1 3 7
> v2
[1] "a" "b" "c" "d"
> class(v1) # clase de objeto
[1] "numeric"
> class(v2)
[1] "character"
9 21
1.2. OBJETOS EN R
11
> v3=3+v1
> v3
[1]
6 10
> v1+v3
[1]
9 17
Conversi
on de un vector en factor
Un factor es un vector usado para datos categoricos. Si deseamos usar un
vector de caracteres en un analisis estadstico, es preciso convertirlo a factor.
Otras veces interesara convertir un vector numerico en factor si los valores
numericos no son interpretables como tales.
La funcion factor()
Ejemplo
> fv2=factor(v2)
> fv2
[1] a b c d
Levels: a b c d
> fv1=factor(v1)
> fv1
[1] 1 3 7
Levels: 1 3 7
Observe que al convertir en factor a v1, los valores del nuevo objeto generado (fv1) no son numericos, por tanto, no se pueden realizar operaciones
aritmeticas con ellos.
Ejemplo
"<=30",
> Edadf=factor(Edad)
>45 30-45
1
1.2. OBJETOS EN R
13
>45
1
TRUE
TRUE
> X[X<=25]
[1] 10 20 25
Operadores u
tiles
Los operadores siguientes pueden resultar u
tiles para generar automaticamente valores.
rep(), seq(), gl(), expand.grid()
Ejemplo
> rep(c(4,2), 2) #repite 2 veces el
vector c(4,2)
1.2. OBJETOS EN R
15
[1] 4 2 4 2
> vect=c(1,2,3)
> rep(c(1,2,3), len = 10) #repite vect hasta alcanzar una longitud igual a l0
[1] 1 2 3 1 2 3 1 2 3 1
> # seq(valor de inicio, valor m
aximo, incremento de la secuencia )
> seq(1,10,2) #genera n
umeros entre 1 y 10 con incrementos de 2.
[1] 1 3 5 7 9
>
seq(1,3,0.5)
#Pueden ser n
umeros reales
>
y termina en n3 (n2 y n3 n
umeros reales)
> seq(length=5,20,22)
[1] 20.0 20.5 21.0 21.5 22.0
Ejemplo
> gl(3,2)
[1] 1 1 2 2 3 3
Levels: 1 2 3
> gl(2,4,labels=c("Bueno","Malo"))
Malo
Malo
Malo
> gl(2,1,length=6) # 1 2 1 2 1 2
[1] 1 2 1 2 1 2
Levels: 1 2
> gl(2,3,length=11) # 1 1 1 2 2 2 1 1 1 2 2
[1] 1 1 1 2 2 2 1 1 1 2 2
Levels: 1 2
nivel
sexo Edad
BAJO Hombre
20
ALTO Hombre
20
BAJO
Mujer
20
ALTO
Mujer
20
BAJO Hombre
25
ALTO Hombre
25
BAJO
Mujer
25
ALTO
Mujer
25
1.2. OBJETOS EN R
17
Modificaci
on de variables
Uso de las funciones cut(), sort(),order(), levels()
Ademas de las resultantes de aplicar operaciones aritmeticas, logicas, etc.
podemos hacer modificaciones como las siguientes:
Agrupacion en intervalos
cut(variable, n de cortes)
Ejemplo
>
>
x=sample(1:10,15,replace=T)
>
(4,6]
(6,8]
(4,6]
(6,8
> #cut(x, br=vector con los cortes o extremos intervalos, labels=vector etique
> cut(x,br=c(0,4,6,10))
[1] (6,10] (6,10] (6,10] (0,4]
(0,4]
(6,10] (0,4]
(6,10] (0,4]
(0,4]
(4,6
alto
alto
bajo
bajo
alto
bajo
alto
bajo
bajo
medio bajo
al
[1] 3 2 4 1
>
[1] 15 20 35 NA
Recodificacion de valores de un vector
Ejemplo
1.2. OBJETOS EN R
19
> X3=factor(c(1,2,2,2,1))
> X3
[1] 1 2 2 2 1
Levels: 1 2
> levels(X3)=c("A","B") # cambia los niveles por defecto del factor X3 por A y
> X3
[1] A B B B A
Levels: A B
1.2.2.
Matrices y arrays
Son objetos que pueden verse como una generalizacion del vector a 2 o
mas dimensiones (como en los vectores, todos sus elementos son del mismo
tipo).
Pueden crearse con las funciones matrix(), array(), as como cbind(),
rbind()
Ejemplo
> m1=matrix(1:9,3,3) # crea matriz de 3 filas y 3 columnas con los valores 1 a 9
> m2=matrix(v2,2,2) # crea una matriz con los elementos del vector v2
> a1=array(1:9,c(3,3))
> a2=array(v2,c(2,2))
> a3=array(1:8,c(2,2,2))
> m1
[,1] [,2] [,3]
[1,]
[3,]
> m2
[,1] [,2]
[1,] "a"
"c"
[2,] "b"
"d"
> a1
[,1] [,2] [,3]
[1,]
[2,]
[3,]
> a2
[,1] [,2]
[1,] "a"
"c"
[2,] "b"
"d"
> a3
, , 1
[,1] [,2]
[1,]
[2,]
1.2. OBJETOS EN R
, , 2
[,1] [,2]
[1,]
[2,]
> dim(m1)
[1] 3 3
> dim(m2)
[1] 2 2
> dim(a1)
[1] 3 3
> dim(a2)
[1] 2 2
> dim(a3)
[1] 2 2 2
21
Creaci
on de matrices uniendo vectores
Ejemplo
> # Uni
on por columnas de los vectores v1 y v3 con la funci
on cbind()
> v1
[1] 1 3 7
> v3
[1]
6 10
> cbind(v1,v3)
v1 v3
[1,]
[2,]
[3,]
7 10
1.2. OBJETOS EN R
23
Ejemplo
> # Uni
on por filas de los vectores v1 y v3 con la funci
on rbind()
> v1
[1] 1 3 7
> v3
[1]
6 10
v3
10
[1] "matrix"
[1] 2 3
1.2.3.
Data.frames
Es la forma mas corriente en que se presentan los datos para su tratamiento. Por eso es un objeto muy importante en el analsis estadstico con R
como contenedor de datos. A diferencia de las arrays puede mezclar columnas
de distinto tipo. Lo que lo hace mas adecuado para contener los datos, ya que
generalmente la informacion consta de variables cualitativas y cuantitativas.
Contruccion de un data.frame con la funcion data.frame(). El data.frame
se construye con vectores de la misma longitud. O con data.frames con el
mismo n
umero de filas.
Ejemplo
> x=c(1,2,3,4)
> v2=c("a","b","c","d")# vector de caracteres
> d1=data.frame(x,v2)
> d1
x v2
1 1
2 2
3 3
4 4
> dim(d1)
# dimensi
on del data.frame
[1] 4 2
> class(d1)
[1] "data.frame"
1.2. OBJETOS EN R
25
"v2"
Adici
on de nuevas columnas al data.frame
Ejemplo
> d1$y=d1$x1 * 3
# a~
nade una nueva columna x1 al data.frame d1
> d1
x1 x2
d 12
> d1[5,]=c(5,"d",20) # a~
nade una nueva fila al data.frame d1
> d1
x1 x2
1.2. OBJETOS EN R
3
d 12
d 20
27
> class(d1)
[1] "data.frame"
# data.frame d1
x1 x2
d 12
d 20
> d2
# data.frame d2
x1 x2
2
y
6
d 12
> # los dos data.fremes deben tener las mismas variables, con los mismo
d 12
d 20
21
31
41
d 12
1.2. OBJETOS EN R
29
> b # data.frame b
y1 y2
1
> cbind(a,b) # a~
nade las columnas del dataframe b a la derecha del a
x1 x2 y1 y2
1
d 12
d 20
y x2
4 12
5 20
1.2. OBJETOS EN R
31
> d1
x1 x2
d 12
d 20
Ejemplo
> subset(d1,y>=6) #Selecciona todas las columnas del data.frame
x1 x2 y
2
b 6
c 9
Ejemplo
> subset(d1,x1<4 & y >5)
x1 x2 y
2
b 6
c 9
Ejemplo
> #Los casos (filas) cuyo "x2" no es ni "a" ni "b"
> d1[!(d1$x2 %in% c("a", "b")), ]
x1 x2
d 12
d 20
d 12
d 20
1.2. OBJETOS EN R
33
x1 x2
3
> d1
x1 x2
d 12
d 20
> #Selecci
on al azar con reemplazamiento de filas de un data.frame:
> v=sample(1:5,10,replace=T) # selecciona 10 n
umeros de entre 1 y 5
> v
[1] 1 1 1 4 5 1 2 5 1 3
1.1
1.2
d 12
d 20
1.3
5.1
d 20
1.4
"3"
"3"
"6"
"20" "3"
"9"
> d4$y=as.numeric(d4$y)
> d4$y
[1]
3 12 20
6 20
7 10
1.2. OBJETOS EN R
x1 x2
35
1.1
1.2
1.3
1.4
d 12
d 20
5.1
d 20
Ejemplo
> # Ordena el data.frame dtf por sexo y selecciona las columnas 4,5 y 6
> #dtf[order(dtf$sexo),4:6]
Ejemplo
> # ordena el data.frame dtf de mayor a menor frecuencia
> # orden=order(dtf$Freq,decreasing=T)
> # dtf[orden,]
Chequeo rapido de data.frames
Con las funcioes str(), summary(), head()
Proporcionan informacion global sobre las variables en un data.frame
dtf:
Ejemplo
> str(d1)
5 obs. of
3 variables:
> summary(d1)
x1
x2
Length:5
a:1
Length:5
Class :character
b:1
Class :character
Mode
c:1
Mode
:character
:character
d:2
> head(d1) # presenta las 10 primeras filas (en el ejemplo solo hay 5)
x1 x2
d 12
d 20
1.2. OBJETOS EN R
37
30
32
27
45
> d1
x1 x2
d 12
d 20
y Edad
9
30
d 12
32
d 20
27
x2
y Edad
NA
NA
30
12
32
20
27
6 <NA> <NA>
45
20
25
30
28
1.2. OBJETOS EN R
5
40
50
39
> aggregate(dtf$Edad,by=list(dtf$Sexo),mean)
Group.1
h 45.00
m 25.75
------------------------------------------------------------------------------dtf$Sexo: m
[1] 103
>
20
25
30
28
40
50
-----------------------------------------------------------------------dtf$Sexo: m
[1] 18.91667
Ejemplo
42.5
Median
45.0
Max.
45.0
50.0
47.5
-----------------------------------------------------------------------dtf$Sexo: m
1.2. OBJETOS EN R
Min. 1st Qu.
20.00
23.75
41
Median
26.50
28.50
Max.
30.00
Ejemplo
> # Resumen de variable de edad por estado civil y sexo del data.frame datos
> # by(datos$edad,list(sexo=datos$SEXO,estadoCivil=datos$ECIV),summary)
Realiza alguna funcion en un data.frame
with(datos,expresion a realizar) ejecuta las operaciones de expresion a
los datos
Ejemplo Realiza un ajuste con el data.frame anorexia del package MASS
y visualiza el resumen
> library(MASS)
> with(anorexia, {
+
summary(anorex.1)
+ })
Call:
glm(formula = Postwt ~ Prewt + Treat + offset(Prewt), family = gaussian)
Deviance Residuals:
Min
1Q
Median
3Q
Max
-14.1083
-4.2773
-0.5484
5.4838
15.2922
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
49.7711
13.3910
-0.5655
0.1612
TreatCont
-4.0971
1.8935
-2.164 0.033999 *
4.5631
2.1333
2.139 0.036035 *
TreatFT
---
Signif. codes:
0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
on 71
degrees of freedom
on 68
degrees of freedom
AIC: 489.97
> boxplot(d0,b$grupo,col="green",ylab="Edad",xlab="Sexo",main="Distribu
> sapply(d0, mean)
45.00 25.75
1.2. OBJETOS EN R
43
h m
2 4
35
20
25
30
Edad
40
45
50
m
Sexo
1.2.4.
Listas
Una lista esta formada por varias componentes. Las componentes pueden
ser de distinto tipo. Son objetos muy flexibles, pero exentos de estructura.
Suelen utilizarse para representar los resultados de funciones usadas en R.
> l1=list(v1,d1)
> l1
[[1]]
[1] 1 3 7
[[2]]
x1 x2
d 12
d 20
> class(l1)
[1] "list"
d 12
d 20
45
> class(l1[[2]])
[1] "data.frame"
> l2=list(v2) # lista con una sola componente
> l3=list(l1,v2)
# a~
nade a la lista l1 el vector v2 para formar la lista, l3
> l4=list(l1,l2) # a~
nade a la dista l1 la lista l2 para formar otra lista,l4
> length(l3);names(l3)
[1] 2
NULL
> l3=list(milista=l1,mivector=v2) # ponemos nombres a las componentes
> length(l4)
[1] 2
1.3.
1.3.1.
1 <=30
2 <=30
ocupado
3 <=30
parado Hombre
4 <=30
parado
8419 22479
47
1.3.2.
1.3.3.
1.3.4.
load(file=nombrefile.rda) carga los objetos guardados en el file nombrefile.rda (guardado previamente con save)
1.3.5.
source(programa.R) carga el archivo que contiene codigo de instrucciones, programa, en memoria para su ejecucion.
1.4.
Escritura de archivos
1.4.1.
49
1.4.2.
save(objeto1, objeto2, file=nombrefile.rda) Guarda objetos en un archivo que luego puede cargar en otra sesion.
1.5.
Es facil encontrar datos faltantes en la informacion con la que se trabaja, por eso dedicamos una seccion a los valores missing, cuyo conocimiento
ahorrara posibles errores en el tratamiento de los datos.
1.5.1.
1.5.2.
Ejemplo
Para colocar missing em determinadas posiciones 2 y 4
> xx=0:4 # vector de longitud 5
> is.na(xx) <- c(2, 4)
> xx
0 NA
1.5.3.
2 NA
Ejemplo
> #Para omitir los valores missing del vector xx
> xx
[1]
0 NA
2 NA
Ejemplo
El argumento mean na.rm=T borra los valores missing antes de calcular
la media.
agreggate(salario,list(a$CALLE,a$NUMCALLE),mean,na.rm=T)
1.5.4.
Sustituci
on de NA por otros valores
Ejemplo
> #Vector Z con primer y
ultimo elemento faltantes:
> Z=c(NA,1,3,NA)
> #Substituci
on de NA por cero:
> Z[is.na(Z)]=0
> Z
Y...
1.6. PRACTICAS
PROPUESTAS: CREACION
51
[1] 0 1 3 0
1.5.5.
Ejemplo
Exluye de los datos los que son missing
NuevoDatos=na.exclude(Datos)
1.6.
Pr
acticas propuestas: Creaci
on y manipulaci
on de datos
Ejercicio pr
actico: Creaci
on de vectores, matrices y data.frames
Cree una carpeta donde guardara los archivos generados y cambie el
directorio a dicha carpeta.
Abra una ventana de Editor R y escriba y ejecute las instrucciones
siguientes:
Construya un vector, x1, numerico formado por 4 elementos con la
funcion c()
Construya un vector ,y1, de tipo caracter formado por 4 elementos con
la funcion c()
Genere un vector nuevo ,x2, multiplicando el vector x1 por 10
Convierta en factor el vector v=c(Medio,Bajo, Medio, .Alto, Bajo, Medio) de modo que los codigos asignados a los niveles del factor
respeten el siguiente orden: Bajo, Medio, Alto.
Genere el vector v2 que convierta en factor el vector v1=c(10,100,200)
Elimine el vector v1 con la funcion rm()
Y...
1.6. PRACTICAS
PROPUESTAS: CREACION
53
Ejercicio pr
actico: Uso de operadores de generaci
on
Genere un vector con la funcion rep() que contenga los 100 valores
primeros iguales a 20 y 100 siguientes iguales a 40
Use el operador : para generar un vector con los enteros de 5 a 50
Use la funcion seq para generar 30 n
umeros igualmente espaciados entre
0y1
Use la funcion expand.grid para generar todas las combinaciones posibles de las variables A, B y C, cuyas modalidades son (A1, A2), (B1,
B2, B3) y (C1, C2), respectivamente.
[
Ejercicio practico: data.frame GR1]Ejercicio practico: data.frame GR1
(Poblacion estimada en Granada)
Para practicar con R usaremos el archivo GR1 que contiene informacion
sobre la poblacion de 16 a
nos o mas, estimada en Granada, clasificada por
Sexo, Edad y Relacion con Actividad (RelAtiv) en el a
no 2005 y en el 2011.
Datos en data.frame GR1:
> GR1
Edad RelActiv
Sexo
P2005
P2011
<=30
ocupado Hombre
53877
26543
<=30
ocupado
Mujer
30877
26642
<=30
parado Hombre
8419
22479
<=30
parado
Mujer
11494
21078
33259
34905
<=30 inactivo
Mujer
43810
38140
30-45
ocupado Hombre
83023
76199
30-45
ocupado
51414
58372
Mujer
30-45
parado Hombre
7252
26763
parado
Mujer
9964
21616
10758
7963
12 30-45 inactivo
Mujer
40901
24361
10 30-45
13
>45
ocupado Hombre
63379
66527
14
>45
ocupado
Mujer
31316
45427
15
>45
parado Hombre
3974
18592
16
>45
parado
Mujer
5393
15704
17
83183
85781
18
>45 inactivo