You are on page 1of 24

Introduccin al software

estadstico R
Mdulo 1
Alberto Muoz
Marzo 2012

Alberto Muoz
R como calculadora
R puede ser utilizado como caluladora interactiva:

>2+2 Escribe 2 + 2 y pulsa ENTER


[1] 4 Aqu est el resultado
> El sistema vuelve al indicador y espera por ms comandos.

> 2*5 Multiplica dos nmeros exp(1) El nmero e


> [1] 10 >2.718282
> 5/2 Divisin real > exp(3) exexe
> [1] 2.5 > 20.08554
> 5 %/% 2 Divisin entera > sqrt(2) Raz cuadrada de 2
>2 > 1.414214
>5 %% 2 Divisin en mdulo: devuelve el resto >log(3) Logaritmo neperiano de 3
1 >1.098612
11%%3 Otro ejemplo de divisin en mdulo >log(3,10) Log de 3 usando base decimal
2 >0.4771213
5^2 5x5 >abs(-3.4) Valor absoluto
25 >3.4
5^2.3 Exponenciacin con exponente real > pi El nmero pi
40.51641 > 3.141593

Alberto Muoz
R como calculadora
Para obtener informacin adicional:

> help(Arithmetic) Funciones aritmticas

> help(Trig) Funciones trigonomtricas

> help(log) Funciones logartmicas y exponenciales

> help(Special) Funciones especiales

> cos(pi)
[1] -1 Los ngulos estn
> cos(3*pi/2) en radianes, no
[1] -1.836910e-16 en grados.
>
round(cos(3*pi/2)
)
[1] 0

Alberto Muoz
Estructuras de datos en R
Vectores
Se pueden definir vectores numricos, pero tambin lgicos y de texto.

> c(1,5,3,4) Crea un vector numrico de longitud 4


[1] 1 5 3 2
> c(T,F,T,T,F) Un vector lgico de 5 elementos
[1] TRUE FALSE TRUE TRUE FALSE
c(madrid,getafe,caracas) Un vector con 3 cadenas de texto
[1] madrid getafe caracas

La letra c significa concatenar. A Seleccionando elementos de un vector:


continuacin creamos y concatenamos
2 vectores: > x = c(18,11,12,10,7,6,17)
> x[c(1,3,6)]
> x = c(1,3,5) [1] 18 12 6
> y = c(2,4,6)
> c(x,y)
[1] 1 3 5 2 4 6 Podemos especificar una condicin logica:

Si queremos excluir algunos > x = c(18,11,12,10,7,6,17)


elementos: > x>10
[1] TRUE TRUE TRUE FALSE FALSE FALSE TRUE
> x = c(18,11,12,10,7,6,17) > x[-c(1,2)]
> x[-3] [1] 12 10 7 6 17
[1] 18 11 10 7 6 17 x[x>10]
> x[-c(1,2)] [1] 18 11 12 17 Alberto Muoz
[1] 12 10 7 6 17
Estructuras de datos en R
Podemos definir vectores de variables: Podemos crear vectores definiendo valores regulares:

> A=1 > 1:5


> B=3 [1] 1 2 3 4 5
> C=5 > seq(1,6)
> y = c(A,B,C) [1] 1 2 3 4 5 6
> y > seq(1,6,by=0.5)
[1] 1 3 5 [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0
> y[B] > seq(1,6,length=10)
[1] 5 [1] 1.000000 1.555556 2.111111 2.666667
3.222222 3.777778 4.333333 4.888889
[9] 5.444444 6.000000

Comandos de replicacin: Valores faltantes:


> rep(1,5)
Se denotan por NA
[1] 1 1 1 1 1
Cualquier operacin aritmtica en la que aparezca NA
> rep(c(1,2),5)
devuelve NA.
[1] 1 2 1 2 1 2 1 2 1 2
Lo mismo para operadores lgicos: < , >, ==, !=
> rep(1:4,2)
[1] 1 2 3 4 1 2 3 4 > x = c(1,2,3,NA,4,5)
> rep(1:3,c(1,4,5)) > x
[1] 1 2 2 2 2 3 3 3 3 3 [1] 1 2 3 NA 4 5

Alberto Muoz
Estructuras de datos en R
Ms sobre valores faltantes:

> x = c(1,2,3,NA,4,5)
> is.na(x)
[1] FALSE FALSE FALSE TRUE FALSE FALSE
> x[x>2]
[1] 3 NA 4 5
> x*2
[1] 2 4 6 NA 8 10
> x<-x[!is.na(x)]
> x
[1] 1 2 3 4 5
Factores

La funcin factor codifica un vector como un factor (categora, con valores predefinidos).
> students.origin =
c("london","paris","madrid","madrid","paris","rome","london","rome","madrid","paris","bonn",
"london","rome","paris","madrid")
> length(students.origin)
[1] 15
> fstudents = as.factor(students.origin)
> fstudents
[1] london paris madrid madrid paris rome london rome madrid paris bonn london
rome paris madrid
Levels: bonn london madrid paris rome
> levels(fstudents)
[1] "bonn" "london" "madrid" "paris" "rome"
> summary(fstudents)
bonn london madrid paris rome
1 3 4 4 3 Alberto Muoz
Estructuras de datos en R
> students.Alturas = c(1.83, 1.71, 1.79, 1.64, 1.74, 1.81, 1.62, 1.84, 1.68, 1.81,
1.82, 1.74, 1.84, 1.61, 1.84)
> tapply(students.Alturas,fstudents,mean)
bonn london madrid paris rome
1.8200 1.7300 1.7375 1.7175 1.8300

La funcin tapply() aplica la funcin mean() a los grupos de alturas de estudiantes definidos por el factor fstudents.

Factores ordenados

Usamos factores ordenados cuando existe algn orden. Para transformar un factor en ordenado: ordered().

Consideremos el nivel de colesterol de un grupo de 10 pacientes:

> nivel.col = c("medio", "medio", "bajo", "medio", "bajo", "medio", "alto",


"alto", "bajo", "bajo" )
> nivel.col.ord = ordered(nivel.col,levels=c("bajo","medio","alto"))
> nivel.col.ord
[1] medio medio bajo medio bajo medio alto alto bajo bajo
Levels: bajo < medio < alto

Ahora, si queremos conocer los pacientes bajo un nivel de colesterol dado:

> nivel.col.ord < "alto"


[1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
> nivel.col.ord < "medio"
[1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
Alberto Muoz
Matrices y arrays
La sintaxis general para construir una matriz es:

matrix(data, nrow, ncol, byrow=F)

data Los elementos de la matriz


nrow Nmero de filas de la matriz
ncol Nmero de columnas de la matriz
byrow La opcin por defecto es: Los datos se colocan
por columnas

> matrix(1:6) Crea un vector columna


[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
[6,] 6

> matrix(1:6,nrow=2) Crea una matriz 2 x 3. Los datos se estn


[,1] [,2] [,3] leyendo por columnas.
[1,] 1 3 5
[2,] 2 4 6

> matrix(1:6,nrow=2,byrow=T) Como en el caso anterior, pero los datos


[,1] [,2] [,3] se colocan por filas.
[1,] 1 2 3
[2,] 4 5 6
Alberto Muoz
Algunas funciones para matrices y arrays

dim Devuelve las dimensiones de una matriz


dimnames Devuelve los nombres de las dimensiones de una matriz
colnames Devuelve los nombres de las columnas de una matriz

rownames Devuelve los nombres de las columnas de una matriz

mode Devuelve el tipo de los elementos de una matriz

length Devuelve el nmero total de elementos de una matriz


is.matrix T si el objeto es una matriz, F en otro caso

[,] Proporciona acceso a los elementos de una matriz

apply Aplica una funcin a las filas o columnas de una matriz


cbind Aade columnas a una matriz dada

rbind Aade filas a una matriz dada

Alberto Muoz
Ejemplos de funciones sobre matrices
Una matriz simple: Podemos aadir filas y columnas:

> x = matrix(1:6,nrow=3) > cbind(x,c(0,0,0))


> x [,1] [,2] [,3]
[,1] [,2] [1,] 1 4 0
[1,] 1 4 [2,] 2 5 0
[2,] 2 5 [3,] 3 6 0
[3,] 3 6 > rbind(x,c(0,0))
> length(x) [,1] [,2]
[1] 6 [1,] 1 4
> mode(x) # tipo de datos [2,] 2 5
[1] "numeric" [3,] 3 6
> dim(x) [4,] 0 0
[1] 3 2
> dimnames(x)
NULL Acceso a los elementos de la matriz:
> rownames(x)
NULL > x[1,]
> colnames(x) [1] 1 4
NULL > x[,1]
> is.matrix(x) [1] 1 2 3
[1] TRUE > x[2,2]
[1] 5
Alberto Muoz
Ejemplos de funciones sobre matrices

> mat = Crea una matriz


matrix(c(20,65,174,22,70,180,19,68,170),nrow=3,byrow=T) 3x3
> mat Muestra el contenido
[,1] [,2] [,3] de la matriz
[1,] 20 65 174
[2,] 22 70 180
[3,] 19 68 170
> colnames(mat) = c(Edad",Peso",Altura") Asigna nombres a las
columnas
> mat La matriz no cambia,
Edad Peso Altura pero las columnas
[1,] 20 65 174 tienen nombre ahora
[2,] 22 70 180
[3,] 19 68 170
> rownames(mat) = c(juan",maria",ana") Asigna nombres a las
filas
> mat Ahora las columnas y
Edad Peso Altura filas tienen nombre
juan 20 65 174
maria 22 70 180
ana 19 68 170
Alberto Muoz
Ejemplos de funciones sobre matrices
Los nombres de columnas y filas se pueden utilizar para trabajar con los elementos de la matriz:

> mat["juan",]
Edad Peso Altura
20 65 174
> mat[,"Edad"]
juan maria ana
20 22 19

> mat[,c("Edad","Altura")]
Edad Altura
juan 20 174
maria 22 180
Ana 19 170

> dimnames(mat)
[[1]]
[1] juan" "maria" "ana"

[[2]]
[1] "Edad" "Peso" "Altura

> apply(mat,2,mean)
Edad Peso Altura
20.33333 67.66667 174.66667 Alberto Muoz
Ms sobre arrays
Un array es la generalizacin de una matriz al caso multidimensional:

array(data, dimensions)

Ejemplo:

> array(1:12,c(2,3,2))
, , 1

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


[1,] 1 3 5
[2,] 2 4 6

, , 2

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


[1,] 7 9 11
[2,] 8 10 12

Alberto Muoz
Un array multidimensional
A continuacin creamos un array multidimensional para guardar la media de Edad, Altura y Peso
de hombres y mujeres correspondientes a dos ciudades:

> x = array(c(45,46,65,55,170,167,48,49,68,56,169,165),c(2,3,2))
> x
, , 1

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


[1,] 45 65 170
[2,] 46 55 167

, , 2

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


[1,] 48 68 169
[2,] 49 56 165

> dimnames(x) = list(c(hombres",mujeres"),c("Edad","Peso","Altura"), c("getafe",


"leganes"))
> x
, , getafe

Edad Peso Altura


hombres 45 65 170
mujeres 46 55 167

, , leganes

Edad Peso Altura


hombres 48 68 169
Mujeres 49 56 165 Alberto Muoz
Un array multidimensional
Para acceder a los elementos de un array multidimiensional:

> x[,,"getafe"] > x[mujeres",,]


Edad Peso Altura getafe leganes
hombres 45 65 170 Edad 46 49
mujeres 46 55 167 Peso 55 56
Altura 167 165
> x[,,"leganes"]
Edad Peso Altura > x[,"Edad",]
hombres 48 68 169 getafe leganes
Mujeres 49 56 165 hombres 45 48
Mujeres 46 49
> x[hombres",,]
getafe leganes
Edad 45 48
Peso 65 68
Altura 170 169

Alberto Muoz
Un array multidimensional
Para calcular la media de las variables Edad, Altura y Peso:

> dim(x) Las variables estn en la segunda dimensin del array:


[1] 2 3 2
> apply(x,2,mean)
Edad Peso Altura
47.00 61.00 167.75

> x[,,"leganes"] + x[,,"getafe"]


Edad Peso Altura
hombres 93 133 339
Mujeres 95 111 332

> x[,,"leganes"] - x[,,"getafe"]


Edad Peso Altura
hombres 3 3 -1
Mujeres 3 1 -2

Alberto Muoz
Listas
En una lista se pueden mezclar objetos de distintos tipos.
Se puede dar nombre a cada componente de una lista, y acceder a los elementos de una lista
bien por su posicin, bien por su nombre.

> a = list(cosa="piedra",peso="8")
> a Una lista puede contener otras listas:
$cosa
[1] "piedra" > b = list("lista que referencia a otra
lista",a)
$peso >b
[1] "8" [[1]]
[1] "lista que referencia a otra lista"
> a$cosa
[1] "piedra" [[2]]
> a[1] [[2]]$cosa
$cosa [1] "piedra"
[1] "piedra"
[[2]]$peso
> a[[1]] [1] "8"
[1] "piedra

Alberto Muoz
Data Frames
Data frames: Estructuras que generalizan el concepto de matriz.

En una matriz todos los elementos son del mismo tipo: numerico, carcter, lgico

En un data frame podemos mezclar distintos tipos de datos.

Primero tratamos de crear una matriz con nmeros y cadenas de caracteres:

> mat = matrix(c(20,65,174,22,70,180,19,68,170),nrow=3,byrow=T)

> dimnames(mat)<-list(c("juan","maria","ana"), c("Edad","Peso","Altura"))

> lugar = c("london","madrid","skopje")

> mat2 = cbind(mat,lugar)

> mat2
Edad Peso Altura lugar
Juan "20" "65" "174" "london"
maria "22" "70" "180" "madrid"
Ana "19" "68" "170" "skopje"

> mean(mat[,"Edad"])
[1] 20.33333
> mean(mat2[,"Edad"])
[1] NA Alberto Muoz
Warning messEdad:
argument is not numeric or logical: returning NA in: mean.default(mat2[, "Edad"])
Data Frames
Ahora creamos un data frame:

> mat3 = data.frame(mat,lugar) > mat3


> mat3 Edad Peso Altura lugar
Edad Peso Altura lugar juan 20 65 174 london
juan 20 65 174 london maria 22 70 180 madrid
maria 22 70 180 madrid Ana 19 68 170 skopje
Ana 19 68 170 skopje
> mat3[2,]
> mode(mat) Edad Peso Altura lugar
[1] "numeric" maria 22 70 180 madrid
> mode(mat2) > mat3[,2]
[1] "character" [1] 65 70 68
> mode(mat3)
[1] "list" > mat3[,"Edad"]
[1] 20 22 19
> mean(mat3[,"Edad"])
[1] 20.33333 > mat3$Edad
[1] 20 22 19
> apply(mat3[,1:3],2,mean)
Edad Peso Altura > attach(mat3)
20.33333 67.66667 174.66667
> Edad
[1] 20 22 19

Alberto Muoz
Leyendo y escribiendo datos
Vamos a aprender a crear datos de cero, y a leerlos y escribirlos de y a disco.

Para entrar datos desde la ventana de comandos:


> letras = scan(,what="character",5)
> scan() 1: a
1: 12 2: b
2: 5 3: c
4: d
3: 7 5: e
4: Read 5 items
Read 3 items
[1] 12 5 7

> data = scan(file="E:\\file.txt",what=character())


Read 3 items
> data
[1] "a" "b" "c"
> data2 = scan(file="E:\\file2.txt")
Read 3 items
> data2
[1] 2 4 6

Alberto Muoz
Leyendo y escribiendo datos

Para elegir un fichero directamente del directorio: Consideremos ahora el fichero numeros.txt,
que contiene los nmeros 1 2 3 4 5 6 7 8 9
choose.files() y queremos convertirlo en una matriz 3 x 3:

> data = choose.files() > numeros = scan("e:\\numeros.txt")


> data Read 9 items
> numeros
[1] "E:\\file2.txt" [1] 1 2 3 4 5 6 7 8 9
> scan(data)
Read 3 items Dos formas de hacerlo:
[1] 2 4 6
> matrix(numeros,nrow=3)
[,1] [,2] [,3]
Supongamos que tenemos el fichero gente.txt :
[1,] 1 4 7
Edad Altura [2,] 2 5 8
juan 30 170 [3,] 3 6 9
maria 25 168
ana 32 172 > matrix(numeros,nrow=3,byrow=T)
[,1] [,2] [,3]
> gente = read.table("e:\\gente.txt") [1,] 1 2 3
[2,] 4 5 6
> gente [3,] 7 8 9
Edad Altura
juan 30 170
maria 25 168
Ana 32 172 Alberto Muoz
Leyendo y escribiendo datos

Podemos escribir la matriz formateada en un nuevo fichero:

> Numeros = matrix(numeros,nrow=3,byrow=T)


> write.table(numeros,"e:\\numeros2.txt")

El contenido del ficheor numeros2.txt :

"V1" "V2" "V3"


"1" 1 2 3
"2" 4 5 6
"3" 7 8 9

Si no queremos los nombres de filas y columnas:

> write.table(numeros,"e:\\numeros2.txt",row.names=F,col.names=F)

Para escribir la tabla gente :

> write.table(gente,"e:\\gente2.txt")

Sin comillas:

> write.table(gente,"e:\\gente2.txt",quote=F) Alberto Muoz


Para producir tablas de datos a partir de conjuntos de datos

> color.pelo = c("negro","rubio","negro","rojo","marron","marron","rubio","negro")


> color.ojos = c("negro","azul","marron","azul","negro","negro","azul","marron")
> table(color.pelo,color.ojos)
color.ojos

color.pelo negro azul marron


negro 1 0 2
marron 2 0 0
rubio 0 2 0
rojo 0 1 0

Alberto Muoz
Objetos y Clases
R es un lenguaje orientado a objetos. Cada objeto en R tiene un tipo y es miembro de una clase.
Hasta ahora hemos encontrado varias clases: vectores carcter, numricos, data frames, listas, arrays.

> class(a)
[1] "list
> tabla = table(color.pelo,color.ojos)
> class(tabla)
[1] "table
> class(mat3)
[1] "data.frame"
> class(mean)
[1] "function"

En el ltimo ejemplo podemos ver que una funcin es un objeto en R de la clase function.
Algunas funciones se asocian con una clase especfica, y reciben el nombre de mtodos.
En R, mtodos para diferentes clases pueden compartir el mismo nombre, y entonces se llaman
funciones genricas.
Por ejemplo, + es una funcin genrica:

> as.Date("2009-02-28") + 7
[1] "2009-03-07"

Alberto Muoz

You might also like