You are on page 1of 54

Estadstica para las Ciencias del Trabajo

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

Mediante este documento presentamos el programa R como una herramienta u


til para realizar un analisis estadstico del proyecto propuesto con
datos reales. R va a proporcionar las funciones necesarias para llevar a cabo
el analisis estadstico. Es un potente paquete estadstico que esta en continuo
desarrollo y es de uso libre. Esta estructurado en paquetes cada uno de los
cuales esta dise
nado para tratamientos estadsticos especficos. El package base (incorporado por defecto) al instalar R es ya suficentemente completo para
realizar tareas estadsticas para llevar a cabo un estudio exhaustivo (descripcion, inferencia, modelacion). No obstante, a veces, puede venir bien instalar
tambien otros packages complementarios que permitan tareas adicionales o
tratamientos graficos especficos.
Las operaciones con R que son basicas para desarrollar el trabajo seran
expuestas con ejemplos sencillos previos, usando datos ficticios generados
sobre la marcha, o bien, tomando parte de los datos de la EPA. En cualquier
caso, estos ejemplos simples sirven para adquirir la destreza necesaria en el
uso de R para realizar la practica final propuesta: Analisis de la EPA.
En lo que sigue se presentan objetos y funciones de R, as como ejemplos,
5

AL PAQUETE ESTADISTICO R. MANIPULACION


DE
6CAPITULO 1. INTRODUCCION
que tienen como fin servir al usuario como referente para uso en los analisis
estadsticos elementales y manipulacion de los datos. Se a
naden ejercicios
propuestos con el fin de reforzar lo aprendido.

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/

La instalacion es facil siguiendo las indicaciones.


Una vez instalado el programa en nuestro ordenador personal, haga doble
clic sobre el icono de R para ejecutarlo.

1.1.2.

Conceptos generales sobre R

R es mas que un paquete estadstico, con un lenguaje orientado a objetos.


Podemos realizar analisis estadsticos complejos y representaciones graficas
de alta calidad. Permite programar para personalizar las tareas a realizar.
Esta en desarrollo creciente. Permite analisis estadsticos complejos como
cualquier paquete estadstico clasico. El usuario puede encontrar paquetes
especficos para tratamientos determinados.
Tiene disponibles manuales de ayuda que pueden ser u
tiles tanto para
empezar a trabajar como para consultas en cualquier momento.

1.1.3.

Sesi
on inicial

Lo primero es familiarizarse con las ventanas de R y con las opciones de


men
u de la ventana principal de R, la denominada R Console. Para ello se
realizan algunas operaciones sencillas, tales como usar R como calculadora,
crear objetos simples que contengan alguna informacion, etc. Conviene usar
el editor R para ejecutar los calculos e instrucciones llevadas a cabo durante
una sesion, de este modo se podran guardar las operaciones llevadas a cabo,
guardando las ordenes correspondientes a la tarea realizada en un archivo

AR
1.1. INTRODUCCION

que contendra las instrucciones, de modo que se podra ejecuar de nuevo en


otro momento, si se desea.
El mejor modo de entender la filosofa de R es practicando, partiendo
de ejemplos simples. Una vez que se entiende el modo en que trabaja R, se
puede usar de forma sencilla con funciones que pueden ser complejas.
Descripcion de la ventana principal (R Console)
Barra de men
u (opciones mas usadas)
Nuevo Script (Abrir editor de R)
Ejecutar ordenes directamente desde la ventana R Console y desde el
editor de R como si fuese una calculadora
Cambiar de directorio de trabajo desde el men
u Archivo o con la funcion
setwd(), por ejemplo:

setwd("C:\\MisDatos\\Datos")

y ver el directorio actual getwd()


Peticion de ayuda a R ? , ??, help()
Ejemplo
Escriba en la R Console:
> getwd()
[1] "C:/Users/mavy/Desktop/ECCTT2012"
> 2+10
[1] 12
> 5*3

AL PAQUETE ESTADISTICO R. MANIPULACION


DE
8CAPITULO 1. INTRODUCCION
[1] 15
> 5:15 # genera valores de 5 a 15
[1]

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

# Proporciona ayuda sobre la funci


on 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

area de trabajo. Estos


permanecen en memoria mientras dura la sesion de
trabajo con R.
Ejemplo
Podemos visualizarlos escribiendo su nombre

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"

Podemos borrar los objetos creados con la funcion rm()


Ejemplo
> rm(a,b)
> ls()
[1] "a1"

"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"

Los datos se presentan en objetos de estructuras diversas.


Estructuras de datos: vectores, matrices, data.frames, listas, tablas,
etc.
Funciones ligadas a estas estructuras son: matrix(), cbind(), rbind(), list(),data.frame(),etc.
Los objetos creados se encuentran en el area de trabajo.
La funcion class() permite visualizar la clase de objeto.

AL PAQUETE ESTADISTICO R. MANIPULACION


D
10CAPITULO 1. INTRODUCCION

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"

Operaciones con vectores


Pueden realizarse operaciones aritmeticas usales con vectores de modo
similar a las realizadas con escalares.
Ejemplo
> 3*v1
[1]

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

AL PAQUETE ESTADISTICO R. MANIPULACION


D
12CAPITULO 1. INTRODUCCION
> 3*fv1
[1] NA NA NA
Mensajes de aviso perdidos
In Ops.factor(3, fv1) : * not meaningful for factors
Una vez que se convierte en factor, el vector es recodificado internamente
por R. As, por ejemplo, si queremos hacerlo numerico de nuevo, NO basta
con poner:
> nv1=as.numeric(fv1)
> nv1
[1] 1 2 3
Para recuperar la informacion original es necesario primero hacerlo caracter
y luego, numerico
Ejemplo
> nv1=as.character(fv1)
> as.numeric(nv1)
[1] 1 3 7
A veces es necesario establecer un orden en los niveles de los factores.
Ejemplo
> Edad=c("<=30",

"<=30",

"30-45", "30-45", "30-45", "30-45", "30-45", "30-

> Edadf=factor(Edad)

> table(Edadf) # orden inapropiado en la tabla generada con la funci


on table
Edadf
<=30
2

>45 30-45
1

1.2. OBJETOS EN R

13

> Edad2=factor(Edad, levels=c("<=30","30-45",">45"))


> table(Edad2) # orden adecuado de las categor
as en la tabla generada
Edad2
<=30 30-45
2

>45
1

Acceso a los elementos de un vector


Seleccion indicando ndices o posiciones, mediante uso de corchetes []
Ejemplo
> v1
[1] 1 3 7
> v2
[1] "a" "b" "c" "d"
> v1[3] # presenta el valor de la posici
on 3 (
ultimo elemento)
[1] 7
> v2[2] # presenta el valor de la posici
on 2
[1] "b"
> v2[2:3] # elementos en posiciones 2 y 3
[1] "b" "c"

AL PAQUETE ESTADISTICO R. MANIPULACION


D
14CAPITULO 1. INTRODUCCION
> v2[-c(1,4)] # selecciona todos menos los de las posiciones 1 y 4
[1] "b" "c"
Seleccion parte de una variable o vector mediante uso de operadores logicos.
Uso de operadores logicos (==,!=, <, >,>=,<=)
Ejemplo Selecciona de Y los valores menores a 29 y mayores a 24 mediante
operador logico
> Y=c(10,20,24,28,29,27,25)
> #
> Y[Y>24 & Y<29]
[1] 28 27 25
Ejemplo
> X=c(10,20,25,30,45)
> X<=25 # genera vector verdadero/falso de la misma longitud que X
[1]

TRUE

TRUE

> X[X<=25]

TRUE FALSE FALSE

# selecciona los valores de X para los que es cierta la expresi


o

[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

[1] 1.0 1.5 2.0 2.5 3.0


> #seq(length=n1,n2,n3) #vector de longitud n1 (entero positivo)
>

#Con valores igualmente espaciados.Los datos comienza en n2

>

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"))

AL PAQUETE ESTADISTICO R. MANIPULACION


D
16CAPITULO 1. INTRODUCCION
[1] Bueno Bueno Bueno Bueno Malo

Malo

Malo

Malo

Levels: Bueno 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

> #genera las 8 combinaciones posibles de niveles de los 3 factores:

> expand.grid(nivel=c("BAJO","ALTO"), sexo=c("Hombre","Mujer"), Edad=c(20,25

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
>

# generamos 15 valores al azar entre 1 y 10 (con repetici


on)

>

x=sample(1:10,15,replace=T)

>

cut(x, 4,dig.lab = 0) # agrupa la variable en 4 intervalos

[1] (8,1e+01] (8,1e+01] (8,1e+01] (4,6]

(4,6]

(6,8]

(4,6]

(6,8

Levels: (2,4] (4,6] (6,8] (8,1e+01]


Ejemplo
>

#Otra forma, dando los puntos de corte:

> #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

Levels: (0,4] (4,6] (6,10]


> cut(x,br=c(0,4,6,10), labels=c("bajo","medio","alto"))
[1] alto

alto

alto

bajo

bajo

alto

Levels: bajo medio alto


Ordenar elementos de una variable o vector
Con sort() y order()

bajo

alto

bajo

bajo

medio bajo

al

AL PAQUETE ESTADISTICO R. MANIPULACION


D
18CAPITULO 1. INTRODUCCION
Sort ordena y elimina los datos missing (genera un vector de menor dimension si hay datos missing). Order ordena y coloca los datos missing
al final (genera un vector de la misma dimension).
Ejemplo
> X2=c(NA,20,15,35)
> sort(X2)#ordena componentes del vector X2
[1] 15 20 35
Ejemplo
>

order(X2) #genera las posiciones de valores ordenados

[1] 3 2 4 1
>

X2[order(X2)] #genera el vector ordenado

[1] 15 20 35 NA
Recodificacion de valores de un vector
Ejemplo

vect[vect==otrovalor]<-NA sustituye el valor otrovalor por NA en vector

vect[is.na(vect)]<-otrovalor Sustituye NA por el n


umero otrovalor en vec
vect=ordered(vect,labels=c("Matem
aticas","F
sica","Geometr
a")) #cambia

#(ordenados, por ejemplo, a,<b,<c) a unos nuevos denomi


#"Matem
aticas","F
sica","Geometr
a", en ese orden.
#Es decir, a=Matem
aticas, b=Fisica y c=Geometr
a.
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,]

AL PAQUETE ESTADISTICO R. MANIPULACION


D
20CAPITULO 1. INTRODUCCION
[2,]

[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

AL PAQUETE ESTADISTICO R. MANIPULACION


D
22CAPITULO 1. INTRODUCCION
Acceso a los elementos de una array
Mediante el uso de corchetes indicado filas, columnas, u otros ordenes de
las dimensiones del objeto [, ].
Ejemplo
> m1[1,3] # elemento en fila 1 y columna 3
[1] 7
> a3[1,1,2] # fila 1, columna 1 del panel 2
[1] 5

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

> ma=rbind(v1,v3) # crea el objeto ma


> ma

[,1] [,2] [,3]


v1

v3

10

> class(ma)# visualiza de qu


e clase es

[1] "matrix"

> dim(ma)# visualiza dimensi


on del objeto

[1] 2 3

AL PAQUETE ESTADISTICO R. MANIPULACION


D
24CAPITULO 1. INTRODUCCION

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

Acceso a los elementos de un data.frame


Mediane uso de [ ] y del smbolo $ precediendo el nombre de la variable
a acceder
Ejemplo
> d1[4,2] # elemento de fila 4 y columna 2
[1] d
Levels: a b c d
> d1[4,] # presenta la fila 4 (y todas las columnas)
x v2
4 4

> d1[,2] # presenta la columna 2 (con todas sus filas)


[1] a b c d
Levels: a b c d
> d1$x # presenta la columna de nombre x del data.frame d1
[1] 1 2 3 4
> d1$v2 #presenta la columna de nombre v2 del data.frame d1
[1] a b c d
Levels: a b c d
> names(d1) # visualiza los nombres del data.frame
[1] "x"

"v2"

AL PAQUETE ESTADISTICO R. MANIPULACION


D
26CAPITULO 1. INTRODUCCION
> names(d1)=c("x1","x2") # renombra las columnas del data.frame
> d1
x1 x2
1

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"

Funciones aplicables a data.frames


Entre las funciones mas usadas destacan:
data.frame(),rbind(),cbind(),subset(),edit(), order(), summary(), head(),
str(), by(), with(), transform(), merge(),attach(), detach()
Union de data.frames por filas
rbind() une por filas.
Ejemplo
> d1

# data.frame d1

x1 x2

d 12

d 20

> d2

# data.frame d2

x1 x2
2

y
6

AL PAQUETE ESTADISTICO R. MANIPULACION


D
28CAPITULO 1. INTRODUCCION
3

d 12

> # los dos data.fremes deben tener las mismas variables, con los mismo

> rbind(d1,d2) #a~


nade las filas del dtaframe dtf2 a continuaci
on de las
x1 x2

d 12

d 20

21

31

41

d 12

Union de data.frames por columnas


cbind() une por columnas vectores o data.frames
Ejemplo
> a # data.frame a
x1 x2
1

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

Cambio del orden de las columnas del data.frame


Ejemplo
> d1
x1 x2

d 12

d 20

AL PAQUETE ESTADISTICO R. MANIPULACION


D
30CAPITULO 1. INTRODUCCION
> d3=cbind(d1)[,c(1,3,2)]
> d3
x1

y x2

4 12

5 20

> # coloca columna 3 en posici


on 2 y columna 2 en posici
on 3
Editor de datos de R
La funcion edit() edita en una cuadrcula los datos de un data.frame
existente o abre el editor de datos.
Ejemplo

edit(a) Visualizar el data.frame a en el editor de data.frames.


dato=edit(data.frame(a))
Permite modificar en la ventana del editor los valores del data.frame a
y guardar los cambios realizados en otro objeto: data.frame dato
Introduccion de datos desde el editor de R

a=edit(data.frame()) #abre el editor de R y genera con los datos introd


el data.frame a
Funciones de seleccion de parte del data.frame
Con la funcion subset() subset(data frame, condicion a verificar, variables del data frame a seleccionar)
Ejemplo

1.2. OBJETOS EN R

31

> d1
x1 x2

d 12

d 20

> subset(d1,x2=="d",select=c(x1,x2)) # Selecciona las columnas x1,x2


x1 x2
4

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

# selecciona todas las columnas

AL PAQUETE ESTADISTICO R. MANIPULACION


D
32CAPITULO 1. INTRODUCCION
Otras formas de seleccionar:
Ejemplo
> # selecciona los casos que cumplen la condici
on x2=d
> d1[d1$x2=="d",1:2] # selecciona las variables en columnas 1 a 2
x1 x2
4

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

> #O usar subset


>

subset(d1, !(x2 %in% c("a", "b")))


x1 x2

d 12

d 20

subset tambien permite la seleccion de variables con signo negativo para


eliminar variables del data.frame:
Ejemplo

1.2. OBJETOS EN R

33

> subset(d1, !(x2 %in% c("a", "b")), select = -y)

x1 x2
3

Seleccion al azar de filas de un data.frame


Con la funcion sample()
Ejemplo

> 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

> d4=d1[v,] # selecciona 10 filas de d1 de entre las 1 a 5


> d4

AL PAQUETE ESTADISTICO R. MANIPULACION


D
34CAPITULO 1. INTRODUCCION
x1 x2

1.1

1.2

d 12

d 20

1.3

5.1

d 20

1.4

Ordenacion de datos de un data.frame seg


un una o mas variables
Con la funcion order()
Ejemplo
> d4$y
[1] "3"

"3"

"3"

"12" "20" "3"

"6"

"20" "3"

"9"

> d4$y=as.numeric(d4$y)
> d4$y
[1]

3 12 20

6 20

> order(d4$y) #genera las posiciones de valores ordenados de y


[1]

7 10

> d4[order(d4$y),] #genera el d4 ordenado seg


un variable y ordenada de

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)

AL PAQUETE ESTADISTICO R. MANIPULACION


D
36CAPITULO 1. INTRODUCCION
'data.frame':
$ x1: chr

5 obs. of

3 variables:

"1" "2" "3" "4" ...

$ x2: Factor w/ 4 levels "a","b","c","d": 1 2 3 4 4


$ y : chr

"3" "6" "9" "12" ...

> 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

Referenciar las variables de un data.frame solo por sus nombres Con


las funciones attach() y detach()
Ejemplo

> attach(a) # crea copia de las variables del data.frame a en el entorn


> detach(a) # desactiva attach

1.2. OBJETOS EN R

37

Mezcla de datos de dos dataframes


Con merge()
Ejemplo
> # Mezcla de variables en data.frames
> # Casos o filas identificados por variable x1
> # Incluye s
olo los elementos comunes en ambos data.frames
>
> d6
x1 Edad
1

30

32

27

45

> d1
x1 x2

d 12

d 20

> merge(d1, d6, by.x="x1",by.y="x1")


x1 x2
1

y Edad
9

30

AL PAQUETE ESTADISTICO R. MANIPULACION


D
38CAPITULO 1. INTRODUCCION
2

d 12

32

d 20

27

> #Con argumento all=TRUE incluir


a todos los casos,
> # colocando valores missing donde no haya informaci
on
> merge(d1, d6, by.x="x1",by.y="x1",all=TRUE)
x1

x2

y Edad

NA

NA

30

12

32

20

27

6 <NA> <NA>

45

Aplica una funcion a subconjuntos del data.frame


aggregate() Aplica la funcion a los subgrupos del dataframe formados
con la lista de factores. Similar a by salvo que el output se estructura
en un vector, en vez de una lista (como puede ser con la funcion by
especificada mas adelante).
aggregate(dataframe, factor o lista de factores, funcion)
Ejemplo
> dtf
Edad Sexo
1

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

Lectura de data.frames de un package


data(nombredataframe, package=nombrepackage) selecciona datos de
un package
Realiza alguna funcion a partes establecidas en un data.frame generando una lista con los resultados
by(variable a resumir, variable que factoriza en clases, funcion a realizar)
by(dataframe, factor o lista de factores, funcion) aplica la funcion a los
subgrupos del dataframe formados formados por la combinacion de sus
niveles. La funcion puede ser summary, boxplot, etc. de columnas del
dataframe.
Ejemplo

> by(dtf[,1],dtf$Sexo,sum) # suma todos los elementos del data.frame en column


dtf$Sexo: h
[1] 90

------------------------------------------------------------------------------dtf$Sexo: m
[1] 103
>

# estableciendo subgrupos por el factor Sexo

AL PAQUETE ESTADISTICO R. MANIPULACION


D
40CAPITULO 1. INTRODUCCION
Ejemplo
> dtf
Edad Sexo
1

20

25

30

28

40

50

> by(dtf$Edad,dtf$Sexo,var) # calcula la varianza de x para hombres y p


dtf$Sexo: h
[1] 50

-----------------------------------------------------------------------dtf$Sexo: m
[1] 18.91667
Ejemplo

> by(dtf$Edad,dtf$Sexo, summary) # realiza un resumen de x para los hom


dtf$Sexo: h
Min. 1st Qu.
40.0

42.5

Median
45.0

Mean 3rd Qu.

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

Mean 3rd Qu.


25.75

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, {
+

anorex.1 <- glm(Postwt ~ Prewt + Treat + offset(Prewt), family = gaussia

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

3.717 0.000410 ***

AL PAQUETE ESTADISTICO R. MANIPULACION


D
42CAPITULO 1. INTRODUCCION
Prewt

-0.5655

0.1612

-3.509 0.000803 ***

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

(Dispersion parameter for gaussian family taken to be 48.69504)

Null deviance: 4525.4

on 71

degrees of freedom

Residual deviance: 3311.3

on 68

degrees of freedom

AIC: 489.97

Number of Fisher Scoring iterations: 2


Crea una lista que divide el data.frame por categoras de un factor
split(dataframe, factor) lista de grupos formados con los niveles de factor
Ejemplo
> d0<-split(dtf$Edad,dtf$Sexo)

> boxplot(d0,b$grupo,col="green",ylab="Edad",xlab="Sexo",main="Distribu
> sapply(d0, mean)

45.00 25.75

> sapply(d0, length)

1.2. OBJETOS EN R

43

h m
2 4

35
20

25

30

Edad

40

45

50

Distribucin Edad segn Sexo

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

AL PAQUETE ESTADISTICO R. MANIPULACION


D
44CAPITULO 1. INTRODUCCION

[[2]]
x1 x2

d 12

d 20

> class(l1)
[1] "list"

Acceso a los elementos de una lista


> l1[[2]] # segunda componente de la lista (en este caso un data.frame)
x1 x2

d 12

d 20

> l1[[2]][,2] #columna 2 de segunda componente de la lista (en este caso un


[1] a b c d d
Levels: a b c d

1.3. LECTURA DE ARCHIVOS DE DATOS

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.

Lectura de archivos de datos

Uso de las funciones:


read.table(),read.fwf(),scan()
Leen archivos guardados como texto

1.3.1.

Lectura de archivos con read.table()

read.table() lee archivos en data.frames


read.table(file=nombrearchivo,sep=\t", header=T,..)
Una opcion u
til es el uso de clipboardcomo medio para manipular datos
en archivos a traves de su captura en el portapapeles.
Ejemplo
datos<-read.table(file=clipboard,sep=\t", header=T)

AL PAQUETE ESTADISTICO R. MANIPULACION


D
46CAPITULO 1. INTRODUCCION
Lectura de archivo guardado previamente con R read.table(Mifile,head=T)
la opcion head=T indica que las variables tienen nombres en la primera
fila del archivo.
Ejemplo
> # Lee archivo GR1 en data.frame a
> a=read.table("DatoR1/GR1",head=T)
> head(a) # visualiza las primeras filas de a
Edad RelActiv

Sexo P2005 P2011

1 <=30

ocupado Hombre 53877 26543

2 <=30

ocupado

Mujer 30877 26642

3 <=30

parado Hombre

4 <=30

parado

8419 22479

Mujer 11494 21078

5 <=30 inactivo Hombre 33259 34905


6 <=30 inactivo

Mujer 43810 38140

Lectura de archivo de texto con nombres de variables en primera fila


del archivo
Ejemplo
read.table(nombre.txt, header=T)
Creado con Excel y guardado con la extension delimitador de coma1
(csv delimitado por comas)
Ejemplo
Creado con Excel (csv delimitado por comas). Variables sin nombres.
ALab=read.table(.Accidentes Laborales Provincias.txt,header=FALSE,sep=,)
Vea otras formas con distintos argumentos de separacion usando la
ayuda de R.
read.table(nombre con extension,header=T, sep="\t", dec=,)
read.table(nombre con extension,header=T, sep=;, dec=,)
read.table(nombre con extension,header=T, sep="\t", dec=,)

1.3. LECTURA DE ARCHIVOS DE DATOS

47

Son equivalentes las formas siguientes de lectura


read.csv2(nombre.csv,header=T)
read.table(nombre.csv,header=T,sep=;)

1.3.2.

Lectura de archivos de amplitud fija

Uso de la funcion read.fwf()


read.fwf(nombreArchivo,widths=vector de amplitdes de campos)
Ejemplo
longi1=c(2,4,1)
nb=read.fwf(ffecua.txt,widths=longi1) el vector longi1 contiene los campos
Ejemplo
datos2=read.fwf(.A2.txt, widths=longi, header = FALSE, sep="\t",skip=1000,
n=1000)
Vea la funcion de ayuda de R(help(read.fwf))

1.3.3.

Lectura con scan()

Introduciendo por teclado


scan() Introduccion de datos. Finaliza pulsando INTRO+ctrl. D.
Ejemplo
a=scan()
Ejemplo
Leyendo un archivo de texto
scan(misdatos.txt, what=c(0,)) lee dos variables del archivo misdatos.
La primera es numerica y la segunda de tipo caracter.
Vea la funcion en ayuda de R (help(scan)).
Nota:
Extensiones usuales para los archivos de datos son:
.txt (creado con editor de texto)
.dat (delimitado con tab de Excel o SPSS)
.csv (delimitado por ; de Excel)
ninguna, si se guarda desde R

AL PAQUETE ESTADISTICO R. MANIPULACION


D
48CAPITULO 1. INTRODUCCION

1.3.4.

Carga de objetos desde el archivo a memoria

load(file=nombrefile.rda) carga los objetos guardados en el file nombrefile.rda (guardado previamente con save)

1.3.5.

Lectura de archivo con sintaxis para ejecutar


programas

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.

Guardar data.frames en archivos

Guardar data.frames en archivos con las funciones write.table(), write.csv2()


write.table(nombre del data frame, nombre archivo)
Ejemplo
write.table(a,Misdatos) guarda el data.frame a en el archivo Misdatos
Ejemplo
Llevar informacion de un data.frame al portapapeles
write.table(a,clipboard,sep="\t") lleva el data.frame a al portapapeles.
(Luego puede pegarse directamente, por ejemplo, en Excel!)
Ejemplo
Guarda informacion en un archivo ya existente, a
nadiendo el contenido
al existente en el archivo
write.table(Miframe, Mifile,append=T) a
nade al contenido existente en
el archivo Mifile el data.frame Miframe.
Ejemplo
Guarda el data.frame en un archivo para abrir con Excel
write.csv2(Miframe, Mifile) Para abrir con Excel (usa separador ;).
Otros ejemplos para escribir o Exportar archivos a Excel
write.csv(dataframe, nombrearchivo) Cuidado! El separador de columnas en el archivo es coma (,)

1.5. TRATAMIENTO DE VALORES MISSING

49

write.csv2(dataframe,nombrearchivo ) Usa delimitador para separar columnas el punto y coma (;)


write.table(dataframe, nombrearchivo, sep="\t", dec=,) Usa separador y decimal especificados.
Observacion: use la opcion write.table en version R.2.0 ( write.csv2, No
disponible en la version R 2.0)

1.4.2.

Guardar objetos que est


an en memoria

save(objeto1, objeto2, file=nombrefile.rda) Guarda objetos en un archivo que luego puede cargar en otra sesion.

1.5.

Tratamiento de valores missing

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.

Chequeo de valores missing

Con la funcion is.na()


Ejemplo
is.na(x) vector logico que chequea los valores missing
sum(is.na(x)) hace recuento de total de valores missing en x

1.5.2.

Sustituye por missing los valores de un vector


en determinadas posiciones

Ejemplo
Para colocar missing em determinadas posiciones 2 y 4
> xx=0:4 # vector de longitud 5
> is.na(xx) <- c(2, 4)
> xx

# coloca NAs en posiciones 2 y 4

AL PAQUETE ESTADISTICO R. MANIPULACION


D
50CAPITULO 1. INTRODUCCION
[1]

0 NA

1.5.3.

2 NA

Quitar los valores que son missing

Ejemplo
> #Para omitir los valores missing del vector xx
> xx
[1]

0 NA

2 NA

> xx[!is.na(xx)] # seleciona las posiciones que no son missing


[1] 0 2 4
>

# y toma los valores del vector en esas posiciones

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.

Uso de funciones para manipular datos missing

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()

AL PAQUETE ESTADISTICO R. MANIPULACION


D
52CAPITULO 1. INTRODUCCION
Convierta en numerico el vector v2 con la funcion as.numeric() y guarde
el resultado en un vector, v3
Convierta en caracter el vector v2 con la funcion as.character() y guarde
el resultado en v4
Convierta en numerico el vector v4
Genere un data.frame, d, con los vectores x1, x2 e y1 con la funcion
data.frame().
Visualice la clase de objeto que es d con la funcion class(), e indique su
dimension con la funcion dim()
Genere un objeto, ob1, uniendo por columnas, con la funcion cbind(),
los vectores x1, x2 e y1
Indique la dimension y clase del objeto ob1
Genere un objeto, ob2, uniendo por filas x1, x2 e y1, con la funcion
rbind()
Indique la dimension y clase del objeto ob2
Construya con la funcion cbind() un objeto, d1, que una las columnas
x1 e y1
Construya con la funcion data.frame() un objeto, d2, que una las columnas x1 e y1
Indique si hay diferencias entre los dos objetos d1 y d2
Indique como podra acceder a la columna 3 (denominada Edad) de un
data.frame, datos
Indique como puede acceder al elemento que esta en la fila 2 y columna
3 de un data.frame, datos


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

<=30 inactivo Hombre

33259

34905

<=30 inactivo

Mujer

43810

38140

30-45

ocupado Hombre

83023

76199

30-45

ocupado

51414

58372

Mujer

AL PAQUETE ESTADISTICO R. MANIPULACION


D
54CAPITULO 1. INTRODUCCION
9

30-45

parado Hombre

7252

26763

parado

Mujer

9964

21616

11 30-45 inactivo Hombre

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

>45 inactivo Hombre

83183

85781

18

>45 inactivo

Mujer 133784 133765

Usando estos datos, aplique las funciones aprendidas de R para manipular,


elaborar, guardar como archivo, etc.

Funciones usadas en tema 1


aggregate, array, as.character, as.numeric, attach, by, c, cbind, class, cut,
data.frame, detach, dim, edit, expand.grid, factor, getwd, gl, head, help, is.na,
levels, list, ls, matrix, merge, na.exclude, order, rbind, read.fwf, read.table,
rep, rm, sample, scan, seq, setwd, sort, str, subset, summary, table, transform,
with, write.csv2, write.table