Sei sulla pagina 1di 28

RPractico

Luis Alberto Vargas Añamaco

1 Primeros pasos

1.1 Conceptos iniciales

Res un lenguaje y entorno de programación, creado en 1993 por Ross Ihaka y Robert Gen-
tleman del Departamento de Estadística de la Universidad de Auckland, cuya característica
principal es que forma un entorno de análisis estadístico para la manipulación de datos, su
cálculo y la creación de gráficos.
En su aspectoRpuede considerarse como otra implementación del lenguaje de programación
S, con la particularidad de que es un software GNU, General Public Licence (conjunto de
programas desarrollados por la Free Software Foundation), es decir, de uso libre. La página
principal del proyecto R-project es https://www.r-project.org, en ella podremos conseguir
gratuitamente el programa en su última versión además de manuales, bibliotecas o paquetes
y demás elementos que forman la gran familia que es R.

1.1.1 El directorio de trabajo

Para obtener el directorio de trabajo:

getwd()

[1] "/lava/soft/R"

Para establecer el directorio de trabajo: setwd(‘PATH’)

[1] 4

1
1.1 Conceptos iniciales RPractico 1 PRIMEROS PASOS

1.1.2 Función ayuda

R es un lenguaje funcional, esto es, realiza las tareas a través de funciones. La primera función
que necesitamos conocer es la que nos proporciona la ayuda del programa, esta es help.

help(mean)
?mean

Si no se conoce el nombre de la función:

??ramdom

Para obtener un ejemplo del uso de una función:

example(cumsum)

cumsum> cumsum(1:10)
[1] 1 3 6 10 15 21 28 36 45 55

cumsum> cumprod(1:10)
[1] 1 2 6 24 120 720 5040 40320 362880
[10] 3628800

cumsum> cummin(c(3:1, 2:0, 4:2))


[1] 3 2 1 1 1 0 0 0 0

cumsum> cummax(c(3:1, 2:0, 4:2))


[1] 3 3 3 3 3 3 4 4 4

1.1.3 Asignaciones

Al igual que ocurre con otros lenguajes de programación, R asigna nombres a las expresiones.
Esto lo conseguiremos mediante los símbolos: <−, −> o =.
En el caso que necesitemos poner notaciones o comentarios en R, estos se realizan poniendo
delante del comentario el símbolo #.

base <- 12
altura = 5
#Determina el area

2 Luis Alberto Vargas Añamaco


1.1 Conceptos iniciales RPractico 1 PRIMEROS PASOS

(base * altura) / 2 -> area


area

[1] 30

1.1.4 Paquetes

Como ya hemos hablado antes, R consta de un sistema base de bibliotecas y de un conjunto


de paquetes adicionales que extienden su funcionalidad.

1.1.5 Funciones ls y rm

La función ls lista el contenido del workspace. rm elimina objetos.

ls()

[1] "altura" "area" "base"

rm(base)
ls()

[1] "altura" "area"

rm(list=ls())
ls()

character(0)

1.1.6 Función library

La función library gestiona la biblioteca, dando información sobre los existentes y cargándolos
en memoria o descargándolos de la misma.

3 Luis Alberto Vargas Añamaco


1.2 Operaciones con números reales y complejos
RPractico 1 PRIMEROS PASOS

1.2 Operaciones con números reales y complejos

R puede utilizarse como una calculadora, ya que es capaz de manejar todas las operaciones
elementales:

Operación Símbolo
Suma +
Diferencia -
Producto *
División /
Potencia ^
División entera %/%
Resto %%

2 + 3

[1] 5

7 - 9

[1] -2

5 * 4

[1] 20

3 / 5

[1] 0.6

9 %/% 4

[1] 2

4 Luis Alberto Vargas Añamaco


1.3 Operadores lógicos RPractico 1 PRIMEROS PASOS

9 %% 4

[1] 1

(2+3i)+(3+1i)

[1] 5+4i

(2+4i)-(3+4i)

[1] -1+0i

(2+3i)*(3+4i)

[1] -6+17i

(2+3i)/(3+4i)

[1] 0.72+0.04i

(2+4i)^3

[1] -88-16i

1.3 Operadores lógicos

Los operadores relacionales y lógicos son:


Relacionales Lógicos
< menor que ! negación
<= meno o igual que & conjunción
> mayor que | disyunción
>= mayor o igual que xor o exclusivo
== igual
!= diferente
5 Luis Alberto Vargas Añamaco
1.3 Operadores lógicos RPractico 1 PRIMEROS PASOS

4 < 5

[1] TRUE

4 <= 5

[1] TRUE

4 > 5

[1] FALSE

4 >= 5

[1] FALSE

4 == 5

[1] FALSE

4 != 5

[1] TRUE

A <- c(TRUE,TRUE,FALSE,FALSE)
B <- c(TRUE,FALSE,TRUE,FALSE)
A & B

[1] TRUE FALSE FALSE FALSE

A | B

[1] TRUE TRUE TRUE FALSE

6 Luis Alberto Vargas Añamaco


RPractico 2 MANIPULACIÓN DE DATOS

xor(A,B)

[1] FALSE TRUE TRUE FALSE

x <- 1:5
y <- c(2,4,3,6,5)
x[x<y]

[1] 1 2 4

y[y>x]

[1] 2 4 6

2 Manipulación de datos

2.1 Operaciones con vectores

El vector es un colección ordenada de elementos del mismo tipo (numéricos, caracteres y


lógicos). Podemos escribir vectores usaremos el operador para secuencias, :, o mediante la
función de concatenación c().

1:10

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

7:-4

[1] 7 6 5 4 3 2 1 0 -1 -2 -3 -4

c(5,10,32,40)

[1] 5 10 32 40

7 Luis Alberto Vargas Añamaco


2.1 Operaciones con vectores RPractico 2 MANIPULACIÓN DE DATOS

c(1:5,8,10,12)

[1] 1 2 3 4 5 8 10 12

La función seq(from=a, to=b, by=c, length=d) genera secuencias de números reales.


Donde a es el valor inicial, b es el valor final, c es el incremento. En casos de generar una
cantidad fija de elementos usar el parámetro length.

seq(1,10,2)

[1] 1 3 5 7 9

seq(1,4,0.2)

[1] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0

seq(1,2,length=9)

[1] 1.000 1.125 1.250 1.375 1.500 1.625 1.750 1.875 2.000

La función rep(a, b) crea un vector con b elementos idénticos al valor a.

rep(2,5)

[1] 2 2 2 2 2

rep(1:4,3)

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

rep(1:3,rep(4,3))

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

8 Luis Alberto Vargas Añamaco


2.1 Operaciones con vectores RPractico 2 MANIPULACIÓN DE DATOS

rep(1:4,1:4)

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

La función sequence() crea una secuencias de enteros. Cada secuencia terminará en el número
especificado como argumento.

sequence(c(3,4,6))

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

La función expand.grid() crea un data frame con todas las combinaciones posibles de los
elementos de los vectores o factores que proporcionemos como argumentos.

expand.grid(edad=c(18,21), peso=c(65,60), sexo=c("Hombre","Mujer"))

edad peso sexo


1 18 65 Hombre
2 21 65 Hombre
3 18 60 Hombre
4 21 60 Hombre
5 18 65 Mujer
6 21 65 Mujer
7 18 60 Mujer
8 21 60 Mujer

La función names() asigna nombres a los elementos de un vector:

x <- 1:7
x

[1] 1 2 3 4 5 6 7

names(x) <- c("Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo")


x

Lunes Martes Miercoles Jueves Viernes Sabado Domingo


1 2 3 4 5 6 7

9 Luis Alberto Vargas Añamaco


2.1 Operaciones con vectores RPractico 2 MANIPULACIÓN DE DATOS

2.1.1 Funciones para el modo

Obtener el modo is.numeric, is.integer, is.double, is.complex, is.character, is.logical


Cambiar el modo as.numeric, as.integer, as.double, as.complex, as.character, as.logical

Para obtener o cambiar el modo (tipo) de los elementos de un vector se utiliza la función
mode. Los tipos son: logical, numeric, complex, character, null, list, function,
graphics, expression, name, frame, raw y unknown.

x <- seq(1,5,2)
mode(x)

[1] "numeric"

mode(x) <- "complex"


x

[1] 1+0i 3+0i 5+0i

2.1.2 Operaciones con vectores

x <- 1:5
y <- 2:6
x+y

[1] 3 5 7 9 11

x-y

[1] -1 -1 -1 -1 -1

x*y

[1] 2 6 12 20 30

10 Luis Alberto Vargas Añamaco


2.1 Operaciones con vectores RPractico 2 MANIPULACIÓN DE DATOS

x/y

[1] 0.5000000 0.6666667 0.7500000 0.8000000 0.8333333

x^2

[1] 1 4 9 16 25

x^y

[1] 1 8 81 1024 15625

Funciones sobre vectores:

sum(x) Suma los elementos de x


prod(x) Determina el producto de los elementos de x
max(x) Determina el valor máximo de x
min(x) Determina el valor mínimo de x
which.max(x) Obtiene el índice del máximo de x
which.min(x) Obtiene el índice del mínimo de x
range(x) Determina el rango de x
length(x) Determina el número de elementos de x
mean(x) Determina el promedio de los elementos de x
median(x) Determina la mediana de los elementos de x
cumsum(x) Determina la suma acumulada de los elementos de x
cumprod(s) Determina el producto acumulada de los elementos de x

La función length obtiene y establece la longitud de un vector.

x <- 4
length(x)

[1] 1

11 Luis Alberto Vargas Añamaco


2.2 Factores RPractico 2 MANIPULACIÓN DE DATOS

length(x) <- 5
x

[1] 4 NA NA NA NA

Para obtener un elemento que ocupa la posición i de un vector x usamos x[i]. Los subindices
pueden ser números naturales o valores lógicos.

x <- (1:6)^3
x

[1] 1 8 27 64 125 216

x[c(1,3,5)]

[1] 1 27 125

sexo <- c("Hombre","Hombre","Mujer")


nombre <- c("Martin","Marcelo","Marta")
sexo == "Hombre"

[1] TRUE TRUE FALSE

nombre[sexo=="Hombre"]

[1] "Martin" "Marcelo"

2.2 Factores

Un factor es un vector que sirve para manejar variables cualitativas con escalas nominal u
ordinal.

12 Luis Alberto Vargas Añamaco


2.2 Factores RPractico 2 MANIPULACIÓN DE DATOS

2.2.1 Factores nominales

Si: M, B, B, M, A, B, B, M, M, B, M, B, B, A, M, B, M, A, M, B.
Representan los niveles socio económicos de 20 familias. Donde B es bajo, M es medio y A es
alto.

x <- c("M","B","B","M","A","B","B","M","M","B","M","B","B","A","M","B","M","A","M","B")
xf <- factor(x)
xf

[1] M B B M A B B M M B M B B A M B M A M B
Levels: A B M

class(xf)

[1] "factor"

levels(xf)

[1] "A" "B" "M"

#Para cambiar los niveles


levels(xf) <- c("Alto","Bajo","Medio")
xf

[1] Medio Bajo Bajo Medio Alto Bajo Bajo Medio Medio Bajo Medio Bajo
[13] Bajo Alto Medio Bajo Medio Alto Medio Bajo
Levels: Alto Bajo Medio

#las frecuencias
table(xf)

xf
Alto Bajo Medio
3 9 8

13 Luis Alberto Vargas Añamaco


2.2 Factores RPractico 2 MANIPULACIÓN DE DATOS

2.2.2 Factores ordinales

Si: 5 3 4 5 6 6 7 7 3 7
Representan los notas de 10 estudiantes en una escala ordinal de de 0 hasta 7.

x <- c(5,3,4,5,6,6,7,7,3,7)
xf <- ordered(x, levels=c(0,1,2,3,4,5,6,7))
xf

[1] 5 3 4 5 6 6 7 7 3 7
Levels: 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7

#Las frecuencias
table(xf)

xf
0 1 2 3 4 5 6 7
0 0 0 2 1 2 2 3

2.2.3 La función tappy

Si tenemos un vector numérico y otro categórico de la misma longitud podemos aplicar una
función de agregación.
La muestra de las edades de 20 personas:
7 22 12 40 35 12 18 33 42 35 2 20 56 17 6 35 56 45 48 12
se desea conocer el promedio de las categorías: niño si sus edades son hasta 11; adolescente si
sus edades son desde 12 y menor que 18 y adultos de 18 en adelante.

x <- c(7,22,12,40,35,12,18,33,42,35,2,20,56,17,6,35,56,45,48,12)
xcat <- ifelse(x<12,"niño",ifelse(x<18,"adolescente","adulto"))
xcat

[1] "niño" "adulto" "adolescente" "adulto" "adulto"


[6] "adolescente" "adulto" "adulto" "adulto" "adulto"
[11] "niño" "adulto" "adulto" "adolescente" "niño"
[16] "adulto" "adulto" "adulto" "adulto" "adolescente"

14 Luis Alberto Vargas Añamaco


2.3 Cadenas RPractico 2 MANIPULACIÓN DE DATOS

xfac <- factor(xcat,levels=c("niño","adolescente","adulto"))


xfac

[1] niño adulto adolescente adulto adulto adolescente


[7] adulto adulto adulto adulto niño adulto
[13] adulto adolescente niño adulto adulto adulto
[19] adulto adolescente
Levels: niño adolescente adulto

tapply(x,xfac,length)

niño adolescente adulto


3 4 13

tapply(x,xfac,mean)

niño adolescente adulto


5.00000 13.25000 37.30769

2.2.4 La función gl

La función gl(n, k, length=n*k, labels=seq_len(n), ordered=FALSE) genera series regulares


de factores. Donde n es el número de niveles (o clases), k es el número de réplicas en cada
nivel. Se pueden usar dos opciones: length para especificar el número de datos producidos, y
labels para especificar los nombres de los factores.

gl(2, 6, labels = c("Hombre", "Mujer"))

[1] Hombre Hombre Hombre Hombre Hombre Hombre Mujer Mujer Mujer Mujer
[11] Mujer Mujer
Levels: Hombre Mujer

2.3 Cadenas

Las cadenas son secuencias de caracteres delimitados por “ “. Para concatenar cadenas usamos
la función paste.

15 Luis Alberto Vargas Añamaco


2.4 Matrices RPractico 2 MANIPULACIÓN DE DATOS

paste("Hola","Mundo",sep="-")

[1] "Hola-Mundo"

paste("Columna",1:4,sep="")

[1] "Columna1" "Columna2" "Columna3" "Columna4"

2.4 Matrices

Las matrices son vectores de dos dimensiones. Para crear una matriz se utiliza la función
matrix(data=NA, nrow=1, ncol=1, byrow=FALSE, dimnames=NULL), donde los parámetros
son: data es el vector que contiene los valores que formarán la matriz, nrow es el número de
filas, ncol es el número de columnas.

matrix(1,3,4)

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


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

matrix(1:9,3)

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


[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

matrix(1:8,2)

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


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

16 Luis Alberto Vargas Añamaco


2.4 Matrices RPractico 2 MANIPULACIÓN DE DATOS

matrix(1:8,4)

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

matrix(1:8,ncol=4)

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


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

matrix(1:9,3,byrow=TRUE)

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


[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9

Para dar nombres a las columnas (o a las filas) usamos el parámetro dimnames.

matrix(1:9,3)

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


[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

matrix(1:9,3,dimnames=list(c(),c("C1","C2","C3")))

C1 C2 C3
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

17 Luis Alberto Vargas Añamaco


2.4 Matrices RPractico 2 MANIPULACIÓN DE DATOS

matrix(1:9,3,dimnames=list(c("F1","F2","F3"),c()))

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


F1 1 4 7
F2 2 5 8
F3 3 6 9

matrix(1:9,3,dimnames=list(c("F1","F2","F3"),c("C1","C2","C3")))

C1 C2 C3
F1 1 4 7
F2 2 5 8
F3 3 6 9

Las operaciones con matrices se hacen con los operadores: + , - , %\*% para al suma, difer-
encia y producto respectivamente. La inversa de una matriz se calcula con la función solve.
Así para resolver un sistema lineal 𝐴𝑋 = 𝐵, usamos la orden X <- solve(A) %\*% B.
Para obtener las dimensiones de una matriz usamos la función dim y para determinar la
transpuesta t.

m1 <- matrix(1:9,3)
m1

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


[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

m2 <- matrix(9:1,3)
m2

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


[1,] 9 6 3
[2,] 8 5 2
[3,] 7 4 1

18 Luis Alberto Vargas Añamaco


2.4 Matrices RPractico 2 MANIPULACIÓN DE DATOS

m1 + m2

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


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

m1 - m2

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


[1,] -8 -2 4
[2,] -6 0 6
[3,] -4 2 8

m1 %*% m2

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


[1,] 90 54 18
[2,] 114 69 24
[3,] 138 84 30

solve( matrix(c(1,1/2,1/3,1/2,1/3,1/4,1/3,1/4,1/5),3) ) %*% matrix(1,3)

[,1]
[1,] 3
[2,] -24
[3,] 30

dim(m1)

[1] 3 3

t(m2)

19 Luis Alberto Vargas Añamaco


2.4 Matrices RPractico 2 MANIPULACIÓN DE DATOS

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


[1,] 9 8 7
[2,] 6 5 4
[3,] 3 2 1

2.4.1 La función diag

Para obtener o modificar la diagonal de una matriz usamos la función: diag.

m <- matrix(1:9,3)
diag(m)

[1] 1 5 9

diag(m) <- 7
m

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


[1,] 7 4 7
[2,] 2 7 8
[3,] 3 6 7

diag(m) <- c(-1,0,1)


m

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


[1,] -1 4 7
[2,] 2 0 8
[3,] 3 6 1

diag(3)

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


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

20 Luis Alberto Vargas Añamaco


2.4 Matrices RPractico 2 MANIPULACIÓN DE DATOS

diag(c(10,20,30))

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


[1,] 10 0 0
[2,] 0 20 0
[3,] 0 0 30

Para obtener y modificar los nombres de las filas y columnas tenemos las funciones: rownames
y colnames:

m <- matrix(1:9,3)
m

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


[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

rownames(m)

NULL

colnames(m)

NULL

rownames(m) <- paste("fila",1:3,sep="")


colnames(m) <- paste("columna",1:3,sep="")
m

columna1 columna2 columna3


fila1 1 4 7
fila2 2 5 8
fila3 3 6 9

Para aumentar filas o columnas tenemos las funciones: rbind y cbind:

21 Luis Alberto Vargas Añamaco


2.4 Matrices RPractico 2 MANIPULACIÓN DE DATOS

m <- matrix(1:9,3)
m

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


[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

rownames(m)

NULL

colnames(m)

NULL

rownames(m) <- paste("fila",1:3,sep="")


colnames(m) <- paste("columna",1:3,sep="")

Para aumentar filas o columnas tenemos las funciones: rbind y cbind:

rbind(m,fila4=c(10,20,30))

columna1 columna2 columna3


fila1 1 4 7
fila2 2 5 8
fila3 3 6 9
fila4 10 20 30

cbind(m,columna4=c(10,20,30))

columna1 columna2 columna3 columna4


fila1 1 4 7 10
fila2 2 5 8 20
fila3 3 6 9 30

22 Luis Alberto Vargas Añamaco


2.5 Arreglos RPractico 2 MANIPULACIÓN DE DATOS

2.5 Arreglos

Los arreglos son matrices de tres o más dimensiones:

array(1:8, dim=c(2,2,2))

, , 1

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

, , 2

[,1] [,2]
[1,] 5 7
[2,] 6 8

2.6 Listas

Una lista es un vector de objetos de tipos distintos. Muchas funciones de R devuelven los
resultados en forma de lista. Para crearlas se usa el comando list. Para extraer un elemento
de una lista se usa lista$nombre o un doble corchete, [[i]], con el número de orden, i, del
objeto dentro de la lista:

x <- list(nombre="Juan",num.hijos=3,edad.hijos=c(4,6,10))
x

$nombre
[1] "Juan"

$num.hijos
[1] 3

$edad.hijos
[1] 4 6 10

x$nombre

23 Luis Alberto Vargas Añamaco


2.6 Listas RPractico 2 MANIPULACIÓN DE DATOS

[1] "Juan"

x[[1]]

[1] "Juan"

x$num.hijos

[1] 3

x[[2]]

[1] 3

x$edad.hijos

[1] 4 6 10

x[[3]]

[1] 4 6 10

2.6.1 Las funciones lapply y sapply

La función sapply permite aplicar una función a cada elemento de una lista y devuelve los
resultados en un vector. Luego lapply hace lo mismo pero retorna una lista:
Crear una lista que tenga tres vectores con 20 datos aleatorios y obtenga su media.

datos <- list(normal=rnorm(n=20,mean=10,sd=5),


poisson=rpois(n=20,lambda=10),
uniforme=runif(n=20,min=5,max=15))
datos

24 Luis Alberto Vargas Añamaco


2.7 Hojas de datos RPractico 2 MANIPULACIÓN DE DATOS

$normal
[1] 5.626693 11.803105 24.374535 6.264398 5.162227 8.660642 11.713861
[8] 13.680031 12.763635 6.088107 10.513069 9.868011 5.952453 7.921779
[15] 5.089650 17.610189 19.179036 15.639686 12.818993 6.788048

$poisson
[1] 9 12 11 8 2 8 5 10 5 13 6 7 15 10 5 11 5 12 7 5

$uniforme
[1] 9.413858 5.164494 6.452243 10.552561 14.423793 9.149134 5.540605
[8] 11.671638 8.301844 9.965121 8.395466 7.055776 7.801536 14.927626
[15] 5.767803 5.695534 8.769980 5.092954 12.342922 6.036205

sapply(datos,mean)

normal poisson uniforme


10.875908 8.300000 8.626055

2.7 Hojas de datos

Las hojas de datos, data frame son estructuras constituidas por diferentes tipos de datos y son
equivalentes a las bases de datos. Las componentes deben ser vectores (numéricos, cadenas de
caracteres, o lógicos), factores, matrices numéricas, listas u otras hojas de datos. Los vectores
numéricos y los factores se incluyen sin modificar, los vectores no numéricos se fuerzan a
factores.

datos <- data.frame(Peso=c(90,120,56), Altura=c(1.90,1.87,1.70),


Sexo=c("Hombre","Hombre","Mujer"))
datos

Peso Altura Sexo


1 90 1.90 Hombre
2 120 1.87 Hombre
3 56 1.70 Mujer

class(datos)

[1] "data.frame"

25 Luis Alberto Vargas Añamaco


2.7 Hojas de datos RPractico 2 MANIPULACIÓN DE DATOS

unclass(datos)

$Peso
[1] 90 120 56

$Altura
[1] 1.90 1.87 1.70

$Sexo
[1] "Hombre" "Hombre" "Mujer"

attr(,"row.names")
[1] 1 2 3

Para seleccionar un subconjunto de una hoja de datos usamos la función subset:

subset(datos,subset=c(Peso<100))

Peso Altura Sexo


1 90 1.9 Hombre
3 56 1.7 Mujer

subset(datos,subset=c(Sexo=="Hombre"))

Peso Altura Sexo


1 90 1.90 Hombre
2 120 1.87 Hombre

subset(datos,select=c(Peso))

Peso
1 90
2 120
3 56

Para añadir una variable a un data frame:

26 Luis Alberto Vargas Añamaco


2.7 Hojas de datos RPractico 2 MANIPULACIÓN DE DATOS

datos$New <- with(datos, log(Peso))


datos

Peso Altura Sexo New


1 90 1.90 Hombre 4.499810
2 120 1.87 Hombre 4.787492
3 56 1.70 Mujer 4.025352

Para eliminar una variable de una hoja de datos:

datos$New <- NULL


datos

Peso Altura Sexo


1 90 1.90 Hombre
2 120 1.87 Hombre
3 56 1.70 Mujer

Para realizar modificaciones a un data frame se usa la función transform.

transform(datos,IMC=Peso/(Altura)^2)

Peso Altura Sexo IMC


1 90 1.90 Hombre 24.93075
2 120 1.87 Hombre 34.31611
3 56 1.70 Mujer 19.37716

2.7.1 Leer y escribir hojas de datos

Para archivar una hoja de datos tenemos la función: write.table(x, file="", sep=" ",
dec=".", row.names=TRUE, col.names=TRUE) donde x puede ser una matriz o hoja de datos,
file es la ruta del archivo, sep es el carácter de separación entre los campos de cada columna,
dec es es carácter para separación decimal, row.names es un valor lógico que indica la inclusión
de esta columna o un vector con los nombres de las filas a ser incluidos en la salida, col.names
es un valor lógico que indica la inclusión de los nombres de los campos o un vector con los
nombres de las columnas a ser incluidas en la salida.
Para recuperar una hoja de datos tenemos: read.table(file, header=FALSE, sep="",
dec="." row.names, col.names, na.strings="NA", eol="\n", nrows=-1, skip=0,

27 Luis Alberto Vargas Añamaco


2.7 Hojas de datos RPractico 2 MANIPULACIÓN DE DATOS

comment.char="#", quote=TRUE) donde file es la ruta del archivo, header indica si la


primera fila contiene los nombre de las variables, sep es el carácter de separación entre los
campos de cada columna, dec es es carácter para separación decimal. Para seleccionar un
archivo del sistema de almacenamiento usamos como file a file.choose(). Para leer desde
el portapapeles usamos file como "clipboard".

datos <- data.frame(Peso=c(90,120,56,78,80), Altura=c(1.90,1.87,1.70,1.65,1.68))


datos <- transform(datos, Sexo=c("Hombre","Hombre","Mujer","Mujer","Hombre"))
datos <- transform(datos, Nombre=I(c("Juan","Jose","Marta","Maria","Carlos")))
datos

Peso Altura Sexo Nombre


1 90 1.90 Hombre Juan
2 120 1.87 Hombre Jose
3 56 1.70 Mujer Marta
4 78 1.65 Mujer Maria
5 80 1.68 Hombre Carlos

write.table(datos, "data.csv", row.names=F, sep=",")

Para recuperar los datos:

read.table(file="data.csv", header=TRUE, sep=",")

Peso Altura Sexo Nombre


1 90 1.90 Hombre Juan
2 120 1.87 Hombre Jose
3 56 1.70 Mujer Marta
4 78 1.65 Mujer Maria
5 80 1.68 Hombre Carlos

Para guarda y recuperar objetos de R usamos save y load respectivamente.

28 Luis Alberto Vargas Añamaco

Potrebbero piacerti anche