Вы находитесь на странице: 1из 27

Mater Hidrologia: 1- Introduccion a r

Angel Udias
Thursday, September 11, 2014

La ayuda en r

Se puede acceder a la ayuda general desde R-studio desde la pestana de ayuda de la ventana inferior derecha.
O tambien con la siguiente instruccion (tanto en R como en R-Studio):

help.start()

## starting httpd help server ... done

## If nothing happens, you should open


## 'http://127.0.0.1:12447/doc/html/index.html' yourself

Para acceder a la ayuda respecto a una funcion determinada:

help(lm)

Otra manera (mas rapida):

?lm

Un listado de todas las funciones que contienen un determinado nombre, por ejemplo lm (modelo de regresion)

apropos("lm")

## [1] ".__C__anova.glm" ".__C__anova.glm.null" ".__C__glm"


## [4] ".__C__glm.null" ".__C__lm" ".__C__mlm"
## [7] ".__C__optionalMethod" ".colMeans" "anova.glm"
## [10] "anova.glmlist" "anova.lm" "anova.lmlist"
## [13] "anova.mlm" "colMeans" "contr.helmert"
## [16] "getAllMethods" "glm" "glm.control"
## [19] "glm.fit" "hatvalues.lm" "KalmanForecast"
## [22] "KalmanLike" "KalmanRun" "KalmanSmooth"
## [25] "kappa.lm" "lm" "lm.fit"
## [28] "lm.influence" "lm.wfit" "model.frame.glm"
## [31] "model.frame.lm" "model.matrix.lm" "nlm"
## [34] "nlminb" "plot.lm" "plot.mlm"
## [37] "predict.glm" "predict.lm" "predict.mlm"
## [40] "print.glm" "print.lm" "residuals.glm"
## [43] "residuals.lm" "rstandard.glm" "rstandard.lm"
## [46] "rstudent.glm" "rstudent.lm" "summary.glm"
## [49] "summary.lm" "summary.mlm"

Algun ejemplo de una funcion:

1
example(lm)

##
## lm> require(graphics)
##
## lm> ## Annette Dobson (1990) "An Introduction to Generalized Linear Models".
## lm> ## Page 9: Plant Weight Data.
## lm> ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
##
## lm> trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
##
## lm> group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
##
## lm> weight <- c(ctl, trt)
##
## lm> lm.D9 <- lm(weight ~ group)
##
## lm> lm.D90 <- lm(weight ~ group - 1) # omitting intercept
##
## lm> ## No test:
## lm> anova(lm.D9)
## Analysis of Variance Table
##
## Response: weight
## Df Sum Sq Mean Sq F value Pr(>F)
## group 1 0.69 0.688 1.42 0.25
## Residuals 18 8.73 0.485
##
## lm> summary(lm.D90)
##
## Call:
## lm(formula = weight ~ group - 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.0710 -0.4937 0.0685 0.2462 1.3690
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## groupCtl 5.03 0.22 22.9 9.5e-15 ***
## groupTrt 4.66 0.22 21.2 3.6e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.696 on 18 degrees of freedom
## Multiple R-squared: 0.982, Adjusted R-squared: 0.98
## F-statistic: 485 on 2 and 18 DF, p-value: <2e-16
##
##
## lm> ## End(No test)
## lm> opar <- par(mfrow = c(2,2), oma = c(0, 0, 1.1, 0))
##
## lm> plot(lm.D9, las = 1) # Residuals, Fitted, ...

2
lm(weight ~ group)

Standardized residuals
Residuals vs Fitted Normal QQ
1.5
Residuals

17
15 2 1517
1.0 4 4
0.5 1
0.0 0
0.5 1
1.0

4.7 4.8 4.9 5.0 2 1 0 1 2

Fitted values Theoretical Quantiles


Standardized residuals

Constant Leverage:

Standardized residuals
ScaleLocation Residuals vs Factor Levels
1.4 17
15 17
1.2 4 2 15 4
1.0 1
0.8 0
0.6
0.4 1
0.2
0.0 2
group :
4.7 4.8 4.9 5.0 Trt Ctl

Fitted values Factor Level Combinations

##
## lm> par(opar)
##
## lm> ## Don't show:
## lm> ## model frame :
## lm> stopifnot(identical(lm(weight ~ group, method = "model.frame"),
## lm+ model.frame(lm.D9)))
##
## lm> ## End Don't show
## lm> ### less simple examples in "See Also" above
## lm>
## lm>
## lm>

Busqueda de ayuda respecto a una funcion en manuales y mailing list (en la nube)

RSiteSearch("lm")

## A search query has been submitted to http://search.r-project.org


## The results page should open in your browser shortly

La siguiente instruccion muestra el manual de una libreria (si esta instalada)

3
vignette("utils")

## Warning: vignette 'utils' not found

Asignacion del directorio de trabajo en r

setwd("D:/DISCO_E/AUDIAS/TRABAJO/URJC/DOCENCIA/ano2014-2015/MasterHidro/Estadistica/CHAP1_PRESENTACI
# getwd()

Uso de r como calculadora

1300/ (14*1.5)

## [1] 61.9

pi/2

## [1] 1.571

Tipos basicos de datos en r


Cualquier tipo de dato, vector, o matriz es un objeto en r

x <- TRUE
class(x)

## [1] "logical"

x <- 2
class(x)

## [1] "numeric"

x <- 2.5
class(x)

## [1] "numeric"

x <- 'hello, Dolly'


class(x)

## [1] "character"

Vectores

Se puede crear un vector vacio con la instruccion vector.

4
miv<-vector()
miv

## logical(0)

miv[3]<-4
miv

## [1] NA NA 4

Para posteriormente ir anadiendole datos:

miv[3]<-4
miv

## [1] NA NA 4

O generarlo ya con una dimension determinada

x <- vector("numeric", length = 10)


x

## [1] 0 0 0 0 0 0 0 0 0 0

Los numeros en r son un tipo de objetos. El infinito es un numero especial (Inf) y se puede emplear para
calculos

5/0

## [1] Inf

1/Inf

## [1] 0

Otro objeto especial es el indefinido NaN (not a number)

0/0

## [1] NaN

Inf-Inf

## [1] NaN

En muchos casos es lo mismo que un VALOR FALTANTE (NA: Not Available) Veamos algunos ejemplos:

5
x <- c(1,2,3,NA,4,5)
x

## [1] 1 2 3 NA 4 5

Cualquier operacin aritmtica que involucre a un NA da por resultado un NA. Esto se aplica tambin a los
operadores lgicos tales como <, <=, >, >=, = =, != (== es para comprobar si dos objetos son iguales, y
!= comprueba si dos objetos son distintos).
Multiplicacion de todos los numeros de un vector x por 2.

x*2

## [1] 2 4 6 NA 8 10

otros ejemplos de vectores:

x <- c(0.5, 0.6) ## numeric


x

## [1] 0.5 0.6

x <- c(TRUE, FALSE) ## logical


x

## [1] TRUE FALSE

x <- c(T, F) ## logical


x

## [1] TRUE FALSE

x <- c("madrid","tarragona","lerida","gerona") ## character


x

## [1] "madrid" "tarragona" "lerida" "gerona"

x <- 9:29 ## integer


x

## [1] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

x <- c(1+0i, 2+4i) ## complex


x

## [1] 1+0i 2+4i

Mezcla de tipos de datos en un objeto

6
y <- c(1.7, "a") ## character
y

## [1] "1.7" "a"

class(y)

## [1] "character"

# y*2 #logicamente da un error porque no puede multiplicar un character


y <- c(TRUE, 2) ## numeric
y

## [1] 1 2

y <- c("a", TRUE) ## character


y

## [1] "a" "TRUE"

Conversion a otro tipo de dato

x <- 0:6
x

## [1] 0 1 2 3 4 5 6

class(x)

## [1] "integer"

as.numeric(x)

## [1] 0 1 2 3 4 5 6

as.logical(x)

## [1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE

as.character(x)

## [1] "0" "1" "2" "3" "4" "5" "6"

7
as.complex(x)

## [1] 0+0i 1+0i 2+0i 3+0i 4+0i 5+0i 6+0i

Algunas conversiones no se pueden realizar (no dan lugares a datos)

x <- c("a", "b", "c")


as.numeric(x) #devuelve NA porque no se peude convertir

## Warning: NAs introduced by coercion

## [1] NA NA NA

as.logical(x)

## [1] NA NA NA

Concatenar vectores o numeros

La letra c significa concatenar en r y es un comando muy util Vamos a crear y a concatenar dos vectores:

x = c(1,3,5) #crea un vector y lo asigna a x


y <- c(4,6) #crea un vector y lo asigna a y
c(x,y) #los concatena

## [1] 1 3 5 4 6

Otras formas de combinar vectores

x <- c(2,4,6)
y <- c(1,2,3,4,5)
union(x,y) #la union de los vectores

## [1] 2 4 6 1 3 5

intersect(x,y) #la interseccion de los vectores

## [1] 2 4

setdiff(x,y) #que elementos del primer conjunto no esta en el segundo

## [1] 6

setdiff(y,x) #que elementos del segundo conjunto no estan en el primero

## [1] 1 3 5

Extraccion de elementos de un vector

Tres posibilidades: * Especificar los ndices de los elementos a extraer:

8
x = c(7,9,11,13,15,17,19) #con parentesis
x[c(1,3,6)] #extrae los elementos 1, 3 y 6 del vecto

## [1] 7 11 17

x[-2] #Un nmero negativo precediendo al ndice significa excluir ese indice

## [1] 7 11 13 15 17 19

x[-c(1,3)] #extrae esos dos valores

## [1] 9 13 15 17 19

Especificar una condicin lgica. En el caso del vector x creado arriba:

x>10

## [1] FALSE FALSE TRUE TRUE TRUE TRUE TRUE

x[x>10] #este extrae los valores que cumplen la condicion (con corchetes)

## [1] 11 13 15 17 19

En el caso de un vector de variables, utilizamos los nombres de las variables para extraer los elementos:

A = 1
B = 3
C = 5
y = c(A,B,C) #con parentesis
y

## [1] 1 3 5

y[B] #seria el tercer elemento de ese vector

## [1] 5

Manipulacion de elementos de un vector

estaturas = c(12, 14, 14, 10, 12, 18, 14, 14, 16, 12)
rev(estaturas) #los pone del ultimo al primero

## [1] 12 16 14 14 18 12 10 14 14 12

9
sort(estaturas,decreasing=FALSE) #los ordena de menor a mayor

## [1] 10 12 12 12 14 14 14 14 16 18

order(estaturas) #indica el numero de orden de cada valor

## [1] 4 1 5 10 2 3 7 8 9 6

estaturas[order(estaturas)] #hace lo mismo que short

## [1] 10 12 12 12 14 14 14 14 16 18

rank(estaturas,ties.method='first') #devuelve la posicion global (ranking) que ocupa cada componente

## [1] 2 5 6 1 3 10 7 8 9 4

head(estaturas, 3) #accede a los tres primeros elementos de vector

## [1] 12 14 14

tail(estaturas,3) #accede a los tres ultimos elementos del vector

## [1] 14 16 12

Extraccion de informacion de un vector

max(estaturas) #Valores extremos: el maximo

## [1] 18

min(estaturas) #Valores extremos: el minimo

## [1] 10

range(estaturas) #Valores extremos: maximo yminimo

## [1] 10 18

which(estaturas==max(estaturas)) #Busqueda: donde estan los valores maximos

## [1] 6

10
estaturas[estaturas>=max(estaturas)] #que da logicamente el mismo resultado

## [1] 18

Muestreo de vectores

sample(estaturas, 7) #toma una muestra aleatoria de 7 valores del vector estatura

## [1] 14 12 12 14 14 18 12

Sencillo calculo estadistico

datos = c(2,3,0,3,1,0,0,1)
# es sencillo realizar operaciones con los elementos de un vector
mean(datos) # La media del vector

## [1] 1.25

median(datos) # La mediana del array

## [1] 1

hist(datos)

11
Histogram of datos
5
4
Frequency

3
2
1
0

0.0 0.5 1.0 1.5 2.0 2.5 3.0

datos

#CREACION DE SECUENCIAS O PATRONES Hay varias rdenes para crear vectores de modo automtico:
* seq permite generar secuencias facilemente

1:5 #Genera nmeros enteros entre 1 y 5.

## [1] 1 2 3 4 5

seq(1,6) #genera 6 numeros enteros

## [1] 1 2 3 4 5 6

seq(1,6,by=0.5) #genera numeros entre 1 y 6 con paso 0.5.

## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0

seq(-2,8,0.5) #tambien se puede escribir asi

## [1] -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5
## [15] 5.0 5.5 6.0 6.5 7.0 7.5 8.0

seq(1,6,length=10) #genera 10 numeros entre 1 y 6 equidistantes

## [1] 1.000 1.556 2.111 2.667 3.222 3.778 4.333 4.889 5.444 6.000

12
pi/1:4 #secuencia de pi entre 1,2, 3 y 4

## [1] 3.1416 1.5708 1.0472 0.7854

sin(pi/1:4) #los senos de los valores de la secuencia anterior

## [1] 1.225e-16 1.000e+00 8.660e-01 7.071e-01

rep genera vectores con repeticiones de valores o de series de valores

rep(1,5) #cinco veces el 1

## [1] 1 1 1 1 1

rep(c(1,2),5) #cinco veces 1 y 2

## [1] 1 2 1 2 1 2 1 2 1 2

rep(1:4,2) #dos veces la secuencia de 1 a 4

## [1] 1 2 3 4 1 2 3 4

rep(1:3,c(1,4,5)) # la secuencia 1,2,3 ha sido repetida de acuerdo al vector (1,4,5), esto es, 1 vez el

## [1] 1 2 2 2 2 3 3 3 3 3

Alguna Propiedades de los Objetos

ls() #lista los objetos que tenemos en memoria

## [1] "A" "B" "C" "ctl" "datos"


## [6] "estaturas" "group" "lm.D9" "lm.D90" "metadata"
## [11] "miv" "opar" "trt" "weight" "x"
## [16] "y"

exists("x") #mira si existe un objeto

## [1] TRUE

exists("objeto")

## [1] FALSE

13
x <- pi * (1:4)
y = seq(-2,8,0.5) #tambien se puede asignar asi el valor a un objeto
x #escribe el valor del objeto

## [1] 3.142 6.283 9.425 12.566

## [1] -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5
## [15] 5.0 5.5 6.0 6.5 7.0 7.5 8.0

mode(x) #propiedades objetos: tipo

## [1] "numeric"

length(y) #propiedades objetos:tamao

## [1] 21

estudiantes.origen = c("getafe","mostoles","madrid","madrid","mostoles",
"leganes","getafe","leganes","madrid","mostoles","parla","alcorcon","mostoles",
"getafe","leganes")

estudiantes.origen

## [1] "getafe" "mostoles" "madrid" "madrid" "mostoles" "leganes"


## [7] "getafe" "leganes" "madrid" "mostoles" "parla" "alcorcon"
## [13] "mostoles" "getafe" "leganes"

mode(estudiantes.origen)

## [1] "character"

Matrices

Una matriz en R es un conjunto de objetos indizados por filas y columnas. Un array en R es lo mismo,
salvo que puede tener ms de dos dimensiones. La sintaxis general de la orden para crear una matriz es la
siguiente: matrix(data, nrow, ncol, byrow=F) donde: data datos que forman la matriz nrow nmero de filas
de la matriz ncol nmero de columnas de la matriz byrow Los datos se colocan por filas o por columnas segn
se van leyendo. Por defecto se colocan por columnas.
Si queremos generar una matriz vacia

m <- matrix(nrow = 2, ncol = 3) #crea una matriz vacia, de dos filas y tres columnas
m

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


## [1,] NA NA NA
## [2,] NA NA NA

14
dim(m) #propiedad que nos dice cual es la dimension de la matriz

## [1] 2 3

attributes(m)

## $dim
## [1] 2 3

Otro ejemplos: Creamos una matriz con 6 elementos. Al no especificarse nada, se entiende que se desea crear
un vector columna

(matrix(1:6))

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

Crea una matriz con 6 elementos y dos filas. Los elementos, que son los nmeros 1,2,3,4,5,6 se van leyendo
por columnas. Crea una matriz con 6 elementos y dos filas. Los elementos, que son los nmeros 1,2,3,4,5,6 se
van leyendo por columnas.

( matrix(1:6,nrow=2) )

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


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

Igual que en el caso anterior, pero se lee por filas, al especificar que la lectura por filas est activada.

( matrix(1:6,nrow=2,byrow=T) )

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


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

cbind : Aade una columna a una matriz dada. rbind : Aade una fila a una matriz dada.

x <- 1:3
y <- 10:12
cbind(x, y)

## x y
## [1,] 1 10
## [2,] 2 11
## [3,] 3 12

15
rbind(x, y)

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


## x 1 2 3
## y 10 11 12

Los datos que contiene una matriz deben ser todos del mismo tipo: todos numricos, o de tipo carcter o
lgico, pero no mezclados. Algunas funciones sobre matrices: dim devuelve las dimensiones de una matriz.
dimnames devuelve el nombre de las dimensiones de una matriz. colnames devuelve el nombre de las columnas
de una matriz. rownames devuelve el nombre de las filas de una matriz. mode devuelve el tipo de datos de los
elementos de una matriz. length devuelve el nmero total de elementos de una matriz. is.matrix devuelve
T si el objeto es una matriz, F si no lo es. [ , ] accede a elementos dentro de la matriz. apply Aplica una
funcin sobre las filas o columnas de una matriz.
Veamos algunos ejemplos:

x = matrix(1:6,nrow=3) # Creamos una matriz 3 x 2


x # Se muestra la matriz x

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

length(x) # Nmero de elementos de x

## [1] 6

mode(x) # Tipo de datos de la matriz x

## [1] "numeric"

dim(x) # Dimensiones de la matriz x

## [1] 3 2

dimnames(x) # Nombre de las dimensiones de la matriz

## NULL

rownames(x) # Nombre de las filas de la matriz

## NULL

colnames(x) # Nombre de las columnas de la matriz

## NULL

16
is.matrix(x) # El objeto x, es una matriz?

## [1] TRUE

y<-c("blanco","negro") # Creamos un vector de dos palabras


is.matrix(y) # El objeto y, es una matriz?

## [1] FALSE

x[] # Se muestran todos los elementos de x

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

x[1,2] # Se muestra el elemento 1,2 de x

## [1] 4

x[1,] # Se muestra la primera fila de x

## [1] 1 4

x[,2] # Se muestra la segunda columna de x

## [1] 4 5 6

cbind(x,c(0,0,0)) # Se aade una columna de ceros a x

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


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

rbind(x,c(0,0)) # Se aade una fila de ceros a x

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

Asignando nombre a las filas y columnas de las matrices Para ello utilizaremos las funciones dimnames,
colnames y rownames, ya comentadas en el prrafo anterior. Por ejemplo, vamos a crear una matriz con tres
personas y su edad, altura y peso como variables:

17
datos = matrix(c(20,65,174,22,70,180,19,68,170),nrow=3,byrow=T) # Se crea una matrix 3x3
datos

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


## [1,] 20 65 174
## [2,] 22 70 180
## [3,] 19 68 170

colnames(datos) = c("edad","peso","altura") #Se asignan nombres a las columnas


datos

## edad peso altura


## [1,] 20 65 174
## [2,] 22 70 180
## [3,] 19 68 170

rownames(datos) = c("paco","pepe","kiko") #Se asignana nombres a las columnas


datos

## edad peso altura


## paco 20 65 174
## pepe 22 70 180
## kiko 19 68 170

Se vuelve a mostrar la matriz. Ya se ven los nombres asignados. Alternativamente:

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

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


## [1,] 20 65 174
## [2,] 22 70 180
## [3,] 19 68 170

dimnames(datos) = list(c("paco","pepe","kiko"), # Aqui esta el cambio


c("edad","peso","altura"))
datos

## edad peso altura


## paco 20 65 174
## pepe 22 70 180
## kiko 19 68 170

La funcin dimnames funciona asignando a su argumento una lista de dos vectores de caracteres: los nombres
de las filas y de las columnas de la matriz: dimnames(objeto) = list( vector de nombres de las filas, vector de
nombres de las columnas). Ahora podemos acceder tambin a los elementos de la madrid usando los nombres:

datos[,"edad"] # Edades de todas las personas

## paco pepe kiko


## 20 22 19

18
datos["pepe",] # Variables del individuo "Pepe"

## edad peso altura


## 22 70 180

datos[,c("edad","altura")] # Edad y altura de todas las personas

## edad altura
## paco 20 174
## pepe 22 180
## kiko 19 170

dimnames(datos) # Muestra los nombres de filas y cols.

## [[1]]
## [1] "paco" "pepe" "kiko"
##
## [[2]]
## [1] "edad" "peso" "altura"

apply(datos,2,mean) # Hallamos la media de las variables

## edad peso altura


## 20.33 67.67 174.67

apply(datos,1,mean) #halla la media las filas (los individuos), en este caso se puede porque todas

## paco pepe kiko


## 86.33 90.67 85.67

Listas.

Son un tipo de datos especial que permiten contener elementos de diferentes clases

x <- list(1, "a", TRUE, 1 + 4i)


x

## [[1]]
## [1] 1
##
## [[2]]
## [1] "a"
##
## [[3]]
## [1] TRUE
##
## [[4]]
## [1] 1+4i

19
Factores.

Se usan para representar datos categricos. Normalmente emplear los factores con etiquetas es mejor que
emplear numeros para describirlos. Por ejemplo es mas claro: hombre, mujer que 1, 2

x <- factor(c("yes", "yes", "no", "yes", "no"))


x

## [1] yes yes no yes no


## Levels: no yes

table(x) #y automaticamente se puede pedir que haga una tabla de las categorias

## x
## no yes
## 2 3

levels(x)

## [1] "no" "yes"

x<- factor(c("yes", "yes", "no", "yes", "no"),


levels = c("yes", "no"))
x

## [1] yes yes no yes no


## Levels: yes no

Valores Faltantes

x <- c(1, 2, NA, 10, 3)


is.na(x) #preguntamos si hay algun faltante

## [1] FALSE FALSE TRUE FALSE FALSE

is.nan(x)

## [1] FALSE FALSE FALSE FALSE FALSE

x[x>2] #Pregunta qu valores de x superan a 2.

## [1] NA 10 3

x<-x[!is.na(x)] #reasigno al vector x el propio vecto x quitando el faltante


x

## [1] 1 2 10 3

20
x <- c(1:4,NA,6:10) #valores no numericos (hay un valor faltante en la secuencia)
x

## [1] 1 2 3 4 NA 6 7 8 9 10

x <- 1:3 #a un vector


names(x) #hasta ahora el objeto x no tiene nombres

Asignacion de nombres a los objetos de r

## NULL

names(x) <- c("foo", "bar", "norf") #


x

## foo bar norf


## 1 2 3

names(x)

## [1] "foo" "bar" "norf"

m <- matrix(1:4, nrow = 2, ncol = 2) #a una matriz


dimnames(m) <- list(c("fila1", "fila2"), c("col1", "col2"))
m

## col1 col2
## fila1 1 3
## fila2 2 4

Data Frames.

Es el objeto mas empleado. Sirven para guardar datos en forma de tablas En cada columna el numero de
elementos es el mismo pero puede ser de tipos diferentes. El numero de elementos es el numero de filas.
Pueden almacenar diferentes clases de objetos Tienene algunos atributos especiales: row.names: permite dar
nombres a las filas. data.matrix() :permite convertir elementos de una matriz en un data frame.
Un primer ejemplo de creacion de un data frame

x <- data.frame(foo = 1:4, bar = c(T, T, F, F))


x

## foo bar
## 1 1 TRUE
## 2 2 TRUE
## 3 3 FALSE
## 4 4 FALSE

21
nrow(x)

## [1] 4

ncol(x)

## [1] 2

Otro ejemplo de creacion de un data frame

my_frame <- data.frame(y1=rnorm(12), y2=rnorm(12), y3=rnorm(12), y4=rnorm(12)) # Creates data frame with
rownames(my_frame) <- month.name[1:12] # Assigns row (index) names. These names need to be unique.
names(my_frame) <- c("y4", "y3", "y2", "y1") # Assigns new column titles.
names(my_frame)[c(1,2)] <- c("y3", "y4") # Changes titles of specific columns.
my_frame <- data.frame(IND=row.names(my_frame), my_frame) # Generates new column with title "IND" contai
my_frame[,2:5] # Different possibilities to remove column(s) from a data frame.

## y3 y4 y2 y1
## January -0.3349 -0.07203 -1.9023 0.7956
## February -0.9159 0.25244 -0.8114 -1.1945
## March 1.2599 -1.10100 -1.1675 -1.1305
## April 0.8550 -0.86361 1.1371 -0.1290
## May 0.6666 -1.33772 1.2724 0.1498
## June -0.1685 -1.25000 0.1302 -0.3570
## July 0.2069 0.95344 -0.1029 0.8730
## August 2.0140 -0.98849 1.4141 -0.2983
## September -1.3085 0.33255 0.4128 0.7917
## October -0.3248 0.41720 -0.5296 -0.4422
## November 0.9612 0.87334 -0.5813 -0.8495
## December -1.0439 -0.67903 1.0089 0.7783

my_frame[,-1] # Different possibilities to remove column(s) from a data frame.

## y3 y4 y2 y1
## January -0.3349 -0.07203 -1.9023 0.7956
## February -0.9159 0.25244 -0.8114 -1.1945
## March 1.2599 -1.10100 -1.1675 -1.1305
## April 0.8550 -0.86361 1.1371 -0.1290
## May 0.6666 -1.33772 1.2724 0.1498
## June -0.1685 -1.25000 0.1302 -0.3570
## July 0.2069 0.95344 -0.1029 0.8730
## August 2.0140 -0.98849 1.4141 -0.2983
## September -1.3085 0.33255 0.4128 0.7917
## October -0.3248 0.41720 -0.5296 -0.4422
## November 0.9612 0.87334 -0.5813 -0.8495
## December -1.0439 -0.67903 1.0089 0.7783

#realmente muestran una columna menos


#si lo que queremos es mostrar solo algunas filas
my_frame[2:9,]

22
## IND y3 y4 y2 y1
## February February -0.9159 0.2524 -0.8114 -1.1945
## March March 1.2599 -1.1010 -1.1675 -1.1305
## April April 0.8550 -0.8636 1.1371 -0.1290
## May May 0.6666 -1.3377 1.2724 0.1498
## June June -0.1685 -1.2500 0.1302 -0.3570
## July July 0.2069 0.9534 -0.1029 0.8730
## August August 2.0140 -0.9885 1.4141 -0.2983
## September September -1.3085 0.3325 0.4128 0.7917

Acceso a la informacion de un Data Frame

my_frame[rows, columns] # Generic syntax to access columns and rows in data frames.

my_frame[4, 5]

## [1] -0.129

dim(my_frame) # Gives dimensions of data frame.

## [1] 12 5

length(my_frame); length(my_frame$y1) # Provides number of columns or rows of data frame, respectively.

## [1] 5

## [1] 12

colnames(my_frame); rownames(my_frame) # Gives column and row names of data frame.

## [1] "IND" "y3" "y4" "y2" "y1"

## [1] "January" "February" "March" "April" "May"


## [6] "June" "July" "August" "September" "October"
## [11] "November" "December"

row.names(my_frame) # Prints row names or indexing column of data frame.

## [1] "January" "February" "March" "April" "May"


## [6] "June" "July" "August" "September" "October"
## [11] "November" "December"

my_frame[order(my_frame$y2, decreasing=TRUE), ] # Sorts the rows of a data frame by the specified column

## IND y3 y4 y2 y1
## August August 2.0140 -0.98849 1.4141 -0.2983
## May May 0.6666 -1.33772 1.2724 0.1498
## April April 0.8550 -0.86361 1.1371 -0.1290

23
## December December -1.0439 -0.67903 1.0089 0.7783
## September September -1.3085 0.33255 0.4128 0.7917
## June June -0.1685 -1.25000 0.1302 -0.3570
## July July 0.2069 0.95344 -0.1029 0.8730
## October October -0.3248 0.41720 -0.5296 -0.4422
## November November 0.9612 0.87334 -0.5813 -0.8495
## February February -0.9159 0.25244 -0.8114 -1.1945
## March March 1.2599 -1.10100 -1.1675 -1.1305
## January January -0.3349 -0.07203 -1.9023 0.7956

# for increasing order use 'decreasing=FALSE'.


my_frame[order(my_frame[,4], -my_frame[,3]),] # Subsequent sub-sorts can be performed by specifying addi

## IND y3 y4 y2 y1
## January January -0.3349 -0.07203 -1.9023 0.7956
## March March 1.2599 -1.10100 -1.1675 -1.1305
## February February -0.9159 0.25244 -0.8114 -1.1945
## November November 0.9612 0.87334 -0.5813 -0.8495
## October October -0.3248 0.41720 -0.5296 -0.4422
## July July 0.2069 0.95344 -0.1029 0.8730
## June June -0.1685 -1.25000 0.1302 -0.3570
## September September -1.3085 0.33255 0.4128 0.7917
## December December -1.0439 -0.67903 1.0089 0.7783
## April April 0.8550 -0.86361 1.1371 -0.1290
## May May 0.6666 -1.33772 1.2724 0.1498
## August August 2.0140 -0.98849 1.4141 -0.2983

my_frame$y1 # Notation to print entire column of a data frame as vector or factor.

## [1] 0.7956 -1.1945 -1.1305 -0.1290 0.1498 -0.3570 0.8730 -0.2983


## [9] 0.7917 -0.4422 -0.8495 0.7783

my_frame$y1[2:4] # Notation to access column element(s) of a data frame.

## [1] -1.195 -1.130 -0.129

v <-my_frame[,4]; v[3] # Notation for returning the value of an individual cell. In this example the cor

## [1] -1.167

# column is first assigned to a vector and then the desired field is accessed by its index number.
my_frame[1:5,] # Notation to view only the first five rows of all columns.

## IND y3 y4 y2 y1
## January January -0.3349 -0.07203 -1.9023 0.7956
## February February -0.9159 0.25244 -0.8114 -1.1945
## March March 1.2599 -1.10100 -1.1675 -1.1305
## April April 0.8550 -0.86361 1.1371 -0.1290
## May May 0.6666 -1.33772 1.2724 0.1498

24
my_frame[, 1:2] # Notation to view all rows of the first two columns.

## IND y3
## January January -0.3349
## February February -0.9159
## March March 1.2599
## April April 0.8550
## May May 0.6666
## June June -0.1685
## July July 0.2069
## August August 2.0140
## September September -1.3085
## October October -0.3248
## November November 0.9612
## December December -1.0439

my_frame[, c(1,3)] # Notation to view all rows of the specified columns.

## IND y4
## January January -0.07203
## February February 0.25244
## March March -1.10100
## April April -0.86361
## May May -1.33772
## June June -1.25000
## July July 0.95344
## August August -0.98849
## September September 0.33255
## October October 0.41720
## November November 0.87334
## December December -0.67903

my_frame[1:5,1:2] # Notation to view only the first five rows of the columns 1-2.

## IND y3
## January January -0.3349
## February February -0.9159
## March March 1.2599
## April April 0.8550
## May May 0.6666

my_frame["August",] # Notation to retrieve row values by their index name (here "August").

## IND y3 y4 y2 y1
## August August 2.014 -0.9885 1.414 -0.2983

x <- data.frame(row.names=LETTERS[1:10], letter=letters[1:10], Month=month.name[1:10]); x; match(c("c","

## letter Month
## A a January

25
## B b February
## C c March
## D d April
## E e May
## F f June
## G g July
## H h August
## I i September
## J j October

## [1] 3 7

%in%

Devuelve los indices de las posiciones cuyos valores coinciden con otros si se emplea con la funcion match . Si
algun indice esta duplicado solo devuelve el primero en el que se da la coincidencia.

x[x[, 2] %in% month.name[3:7],] # Subsets a data frame with a query vector using the '%in%' function. Th

## letter Month
## C c March
## D d April
## E e May
## F f June
## G g July

as.vector(as.matrix(my_frame[1,])) # Returns one row entry of a data frame as vector.

## [1] "January" "-0.3349" "-0.07203" "-1.902" "0.7956"

#as.data.frame(my_list) # Returns a list object as data frame if the list components can be converted in

Calculos con Data Frames

summary(my_frame) # Prints a handy summary for a data frame.

## IND y3 y4 y2
## April :1 Min. :-1.3085 Min. :-1.338 Min. :-1.9023
## August :1 1st Qu.:-0.4801 1st Qu.:-1.017 1st Qu.:-0.6389
## December:1 Median : 0.0192 Median :-0.376 Median : 0.0137
## February:1 Mean : 0.1556 Mean :-0.289 Mean : 0.0234
## January :1 3rd Qu.: 0.8815 3rd Qu.: 0.354 3rd Qu.: 1.0409
## July :1 Max. : 2.0140 Max. : 0.953 Max. : 1.4141
## (Other) :6
## y1
## Min. :-1.1945
## 1st Qu.:-0.5440
## Median :-0.2137
## Mean :-0.0844

26
## 3rd Qu.: 0.7816
## Max. : 0.8730
##

mean(my_frame) # Calculates the mean for all columns.

## Warning: argument is not numeric or logical: returning NA

## [1] NA

names(my_frame) #como la columna IND no es numerica no permite el calculo

## [1] "IND" "y3" "y4" "y2" "y1"

my_frame[, 2:5]

## y3 y4 y2 y1
## January -0.3349 -0.07203 -1.9023 0.7956
## February -0.9159 0.25244 -0.8114 -1.1945
## March 1.2599 -1.10100 -1.1675 -1.1305
## April 0.8550 -0.86361 1.1371 -0.1290
## May 0.6666 -1.33772 1.2724 0.1498
## June -0.1685 -1.25000 0.1302 -0.3570
## July 0.2069 0.95344 -0.1029 0.8730
## August 2.0140 -0.98849 1.4141 -0.2983
## September -1.3085 0.33255 0.4128 0.7917
## October -0.3248 0.41720 -0.5296 -0.4422
## November 0.9612 0.87334 -0.5813 -0.8495
## December -1.0439 -0.67903 1.0089 0.7783

mean(my_frame[, 2:5])

## Warning: argument is not numeric or logical: returning NA

## [1] NA

data.frame(my_frame, mean=apply(my_frame[,2:5], 1, mean), ratio=(my_frame[,2]/my_frame[,3]))

## IND y3 y4 y2 y1 mean ratio


## January January -0.3349 -0.07203 -1.9023 0.7956 -0.37840 4.6493
## February February -0.9159 0.25244 -0.8114 -1.1945 -0.66736 -3.6283
## March March 1.2599 -1.10100 -1.1675 -1.1305 -0.53476 -1.1443
## April April 0.8550 -0.86361 1.1371 -0.1290 0.24986 -0.9900
## May May 0.6666 -1.33772 1.2724 0.1498 0.18777 -0.4983
## June June -0.1685 -1.25000 0.1302 -0.3570 -0.41131 0.1348
## July July 0.2069 0.95344 -0.1029 0.8730 0.48260 0.2170
## August August 2.0140 -0.98849 1.4141 -0.2983 0.53532 -2.0374
## September September -1.3085 0.33255 0.4128 0.7917 0.05713 -3.9349
## October October -0.3248 0.41720 -0.5296 -0.4422 -0.21986 -0.7784
## November November 0.9612 0.87334 -0.5813 -0.8495 0.10093 1.1006
## December December -1.0439 -0.67903 1.0089 0.7783 0.01605 1.5374

27

Вам также может понравиться