Sunteți pe pagina 1din 29

Tipos de objetos en R

 Objetos del lenguaje:


Llamadas, expresiones, nombres
 Expresiones
Colecciones de expresiones correctas no evaluadas
 Funciones
Constan de lista de argumentos, código, entorno

Operaciones:

Aritméticas: se pueden usar operaciones con vectores


Lógicas: se evalúan de izquierda a derecha, examinando el primer elemento de
cada vector

Clases de datos en R

 Numérico (numeric)
 Cadenas (character)
 Factores (factor)
 Valores lógicos (logical)

Funciones para clases


class()

is.numeric()
is.character()
Funciones para transformar la clase de un objeto
as.numeric()
as.character()
as.logical()
as.integer()

Clase numeric

Los números en R pueden ser enteros (integer) o reales (real). Tambien pueden
ser complejos (complex)

Operaciones con números


Suma: +
Resta: -
Multiplicación: *
División: /
Exponenciación: ^
Comparación: > , >= , <= , == , ! =

Objetos:
Vector
Vectores
Un vector es una lista ordenada de elementos de un mismo tipo. Un vector en R
puede contener una colección de números o de caracteres no numéricos.
El tipo de un vector se puede verificar con la función typeof()
x<-c (2, 4, 6, 8, 10)
Otra propiedad importante de un vector es su longitud. Este es el número de
elementos en el vector y se puede verificar con la función length()
Funciones para definir vectores:
 c: sirve para concatenar datos en un vector
 scan: permite leer o importa datos
 Para vectores específicos: rep, seq

Funcion rep
rep(): permite construir vectores repitiendo datos o vectores
rep (x, n): vector formado por n copias de x

Por ejemplo, rep(0,100) devolvería un vector de 100 ceros. O también, rep(1:3,3)


devolvería
[1] 1 2 3 1 2 3 1 2 3
Si queremos saber la longitud de un vector, usaremos length().
Decir, por último, que no hay problema en que un vector, en vez de incluir números,
incluya caracteres, siempre que estos estén entre comillas. Por ejemplo, podríamos
definir el vector:
reinos<-c("Archae","Bacteria","Protozoa","Chromista",
"Fungi","Plantae","Animalia")
Funcion seq
Se pueden crear secuencias más complejas utilizando la función seq(), como
definir el número de puntos en un intervalo o el tamaño del paso.
seq: permite construir progresiones aritméticas
seq (1, 3, by = 0.2) # especifica el tamaño del paso
[1] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0
seq (1, 5, length.out = 4) # especifica la longitud del vector
[1] 1.000000 2.333333 3.666667 5.000000
y<-seq(-3,3,0.5)
[1] -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0

Usando el vector entero como índice

El índice vectorial en R comienza desde 1, a diferencia de la mayoría de los


lenguajes de programación donde el índice comienza desde 0.
Podemos usar un vector de enteros como índice para acceder a elementos
específicos.
También podemos usar enteros negativos para devolver todos los elementos,
excepto los especificados.
Pero no podemos mezclar enteros positivos y negativos mientras que la
indexación y los números reales, si se usan, se truncan a enteros.

>x
[1] 0 2 4 6 8 10
> x[3] # access 3rd element
[1] 4
> x[c(2, 4)] # access 2nd and 4th element
[1] 2 6
x[-1] # access all but 1st element
[1] 2 4 6 8 10
x[c(2, -4)] # cannot mix positive and negative integers
Error in x[c(2, -4)] : only 0's may be mixed with negative subscripts
x[c(2.4, 3.54)] # real numbers are truncated to integers
[1] 2 4

Usando el vector lógico como índice

Cuando usamos un vector lógico para indexar, TRUE devuelve la posición donde
se encuentra el vector lógico.
Esta útil característica nos ayuda a filtrar el vector como se muestra a
continuación.

x[c(TRUE, FALSE, FALSE, TRUE)]


[1] -3 3
x[x < 0] # filtering vectors based on conditions
[1] -3 -1
x[x > 0]
[1] 3
En el ejemplo anterior, la expresión x>0producirá un vector lógico (FALSE, FALSE,
FALSE, TRUE) que luego se utilizará para la indexación.

Usando el vector de caracteres como índice


Este tipo de indexación es útil cuando se trata de vectores con nombre. Podemos
nombrar cada elemento de un vector.

x <- c("first"=3, "second"=0, "third"=9)


names(x)
[1] "first" "second" "third"
> x["second"]
second
0
> x[c("first", "third")]
first third
3 9

¿Cómo modificar un vector en R?


Podemos modificar un vector usando el operador de asignación.

Podemos usar las técnicas discutidas anteriormente para acceder a elementos


específicos y modificarlos.

Si queremos truncar los elementos, podemos usar reasignaciones.


>x
[1] -3 -2 -1 0 1 2
> x[2] <- 0; x # modify 2nd element
[1] -3 0 -1 0 1 2
> x[x<0] <- 5; x # modify elements less than 0
[1] 5 0 5 0 1 2
> x <- x[1:4]; x # truncate x to first 4 elements
[1] 5 0 5 0
¿Cómo borrar un vector?
Podemos eliminar un vector simplemente asignándole un NULLa.

>x
[1] -3 -2 -1 0 1 2
> x <- NULL
>x
NULL
> x[4]
NULL

Data Frame
En este artículo, aprenderá sobre marcos de datos en R; cómo crearlos, acceder a
sus elementos y modificarlos en su programa.
El marco de datos es una estructura de datos bidimensional en R. Es un caso
especial de una lista que tiene cada componente de igual longitud.
Cada componente forma la columna y el contenido del componente forma las filas.
Compruebe si una variable es un marco de datos o no
Podemos verificar si una variable es un marco de datos o no utiliza la función
class().
>x
SN Age Name
1 1 21 John
2 2 15 Dora
> typeof(x) # data frame is a special case of list
[1] "list"
> class(x)
[1] "data.frame"
En este ejemplo, x puede considerarse como una lista de 3 componentes con cada
componente que tiene un vector de dos elementos. A continuación se detallan
algunas funciones útiles para saber más sobre un marco de datos.

Funciones del marco de datos.


> names(x)
[1] "SN" "Age" "Name"
> ncol(x)
[1] 3
> nrow(x)
[1] 2
> length(x) # returns length of the list, same as ncol()
[1] 3
¿Cómo crear un marco de datos en R?
Podemos crear un marco de datos usando la función data.frame()
Por ejemplo, el marco de datos mostrado arriba se puede crear de la siguiente
manera.

> x <- data.frame("SN" = 1:2, "Age" = c(21,15), "Name" = c("John","Dora"))


> str(x) # structure of x
'data.frame': 2 obs. of 3 variables:
$ SN : int 1 2
$ Age : num 21 15
$ Name: Factor w/ 2 levels "Dora","John": 2 1
Observe arriba que la tercera columna, Namees de tipo factor , en lugar de un
vector de caracteres .
Por defecto, la función data.frame() convierte el vector de caracteres en factor.
Para suprimir este comportamiento, podemos pasar el argumento
stringsAsFactors=FALSE

> x <- data.frame("SN" = 1:2, "Age" = c(21,15), "Name" = c("John", "Dora"),


stringsAsFactors = FALSE)
> str(x) # now the third column is a character vector
'data.frame': 2 obs. of 3 variables:
$ SN : int 1 2
$ Age : num 21 15
$ Name: chr "John" "Dora"
Muchas de las funciones de entrada de datos de R como, read.table(), read.csv(),
read.delim(), read.fwf()también leen los datos en una trama de datos.
¿Cómo acceder a los componentes de un marco de datos?
Se puede acceder a los componentes del marco de datos como una lista o como
una matriz.
Accediendo como una lista
Podemos utilizar cualquiera [, [[o $el operador de acceso a las columnas de trama
de datos.

> x["Name"]
Name
1 John
2 Dora
> x$Name
[1] "John" "Dora"
> x[["Name"]]
[1] "John" "Dora"
> x[[3]]
[1] "John" "Dora"
Acceder con [[o $es similar. Sin embargo, difiere [en eso, la indexación con [nos
devolverá un marco de datos, pero los otros dos lo reducirán a un vector.

Accediendo como una matriz


Se puede acceder a los marcos de datos como una matriz al proporcionar índices
para filas y columnas.
Para ilustrar esto, utilizamos conjuntos de datos ya disponibles en R. Los conjuntos
de datos que están disponibles se pueden enumerar con el comando library (help =
"datasets").

Utilizaremos el conjunto de datos trees que contiene Girth, Heighty Volumepara


Black Cherry Trees.
Un marco de datos se puede examinar utilizando funciones como str() y head()

> str(trees)
'data.frame': 31 obs. of 3 variables:
$ Girth : num 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 ...
$ Height: num 70 65 63 72 81 83 66 75 80 75 ...
$ Volume: num 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 ...
> head(trees,n=3)
Girth Height Volume
1 8.3 70 10.3
2 8.6 65 10.3
3 8.8 63 10.2
Podemos ver que tres es un marco de datos con 31 filas y 3 columnas. También
mostramos las primeras 3 filas del marco de datos.
Ahora procedemos a acceder al marco de datos como una matriz.
> trees[2:3,] # select 2nd and 3rd row
Girth Height Volume
2 8.6 65 10.3
3 8.8 63 10.2
> trees[trees$Height > 82,] # selects rows with Height greater than 82
Girth Height Volume
6 10.8 83 19.7
17 12.9 85 33.8
18 13.3 86 27.4
31 20.6 87 77.0
> trees[10:12,2]
[1] 75 79 76
Podemos ver en el último caso que el tipo devuelto es un vector ya que extrajimos
datos de una sola columna.
Este comportamiento puede evitarse pasando el argumento de la drop=FALSE de
la siguiente manera.

> trees[10:12,2, drop = FALSE]


Height
10 75
11 79
12 76
¿Cómo modificar un marco de datos en R?
Los marcos de datos se pueden modificar como modificamos las matrices a través
de la reasignación.

>x
SN Age Name
1 1 21 John
2 2 15 Dora
> x[1,"Age"] <- 20; x
SN Age Name
1 1 20 John
2 2 15 Dora
Agregar componentes
Se pueden agregar filas a un marco de datos utilizando la rbind()función.

> rbind(x,list(1,16,"Paul"))
SN Age Name
1 1 20 John
2 2 15 Dora
3 1 16 Paul
Del mismo modo, podemos agregar columnas usando cbind().
> cbind(x,State=c("NY","FL"))
SN Age Name State
1 1 20 John NY
2 2 15 Dora FL
Dado que los marcos de datos se implementan como una lista, también podemos
agregar nuevas columnas a través de asignaciones simples como listas.

>x
SN Age Name
1 1 20 John
2 2 15 Dora
> x$State <- c("NY","FL"); x
SN Age Name State
1 1 20 John NY
2 2 15 Dora FL
Eliminar componente
Las columnas del marco de datos se pueden eliminar asignándolas NULL.

> x$State <- NULL


>x
SN Age Name
1 1 20 John
2 2 15 Dora
Del mismo modo, las filas se pueden eliminar mediante reasignaciones.

> x <- x[-1,]


>x
SN Age Name
2 2 15 Dora
Usos básicos
 seq(a, b, by=r): de a a b con paso r
 seq(a, by=r, length.out = n): a partir de a, de longitude n con paso r

Funcion scan
Usos
 scan() permite entrar en consola la lista de datos
 scan(fichero) define un vector a partir del fichero

Parametros función scan


 sep: Especifica el signo de separación de entradas (valor por defecto:
espacio en blanco)
 dec=”,”: Especifica que el separador decimal es una coma (valor por
defecto: un punto)
 what: Especifica el tipo de datos (valor por defecto: el más general en el
vector)
 encoding: Especifica la codificación de alfabeto (valor por defecto: el
esperado por sistema operativo)

Aplicación de funciones a vectores

R permite aplicar una función a todas las entradas de un vector de golpe:

 Aplicando la función al vector:

función(vector)

 En los casos en que esto no funcione, usando

sapply(vector, FUN=función)
Matrices

Son vectores con un atributo de dimensión que indica el número de filas y columnas
Matriz n x m: n filas y m columnas

Todas sus entradas del mismo tipo de datos

La función matrix

Se pueden crear mediante la función matrix()


Parámetros básicos:

 byrow: indica si se organizan por filas (TRUE), o por columnas (FALSE,


valor por defecto)
 nrow o ncol: número de filas o de columnas
x=1:12
matrix(x, nrow=3)
matrix(x, nrow=3, byrow=TRUE)
matrix(x, ncol=4, byrow=TRUE)
matrix(x, ncol=5, nrow=5, byrow=TRUE)
m<- matrix(1:9, nrow=3, ncol=3)

Para conocer las dimensiones podemos usar la función dim()

Otra manera de generar matrices en R es usando las funciones:


cbind(): concatena matrices y vectores por columnas
rbind(): concatena matrices y vectores por filas
a=1:4
b=c(1, 3, 5,7)
c=rep(0, 4)
rbind(a, b, c)
cbind(a, b, c)

A=diag(4)
rbind(A, a, b, c)
cbind(a, A, b, c)

x<-5:8

y<-12:15

cbind(x, y)

rbind(x,y)

Operaciones vectoriales con matrices

x<-matrix(1:16, 4, 4)
y<-matrix(rep(5, 16), 4, 4)
x+y
x*y

Entradas y submatrices
Dada una matriz M:
 M[ i, j ]: entrada (i, j) de M
 M[ i, ]: fila i-ésima de M
 M[ , j ]: columna j- ésima de M

Usando vectores de índices en vez de índices, se obtienen submatrices


determinadas por las filas y columnas indicadas

A=matrix(1:30, nrows=5)
A=[2, 3]
A=[3, ]
A=[ , 3]
A=[ , 1:2]
A=[c(1, 3, 5), (2, 4 ,6)]

Función diag

Diagonal principal de la matriz


diag(A)

Algunas funciones con matrices

 sum, prod, mean,…: se usan como en vectores, con el mismo significado

 colSums: vector de sumas de columnas

 rowSums: vector de sumas de filas

 colMeans: vector de medias de columnas

 rowMeans: vector de medias de filas

mean(A)
rowSams(A)
colMeans(A)

Aplicación de funciones

apply(matriz, FUN=función, MARGIN=…)

Aplica la función a la matriz:


 MARGIN=1: fila a fila
 MARGIN=2: columna a columna
 MARGIN=c(1, 2): entrada a entrada

A menudo podemos usar función(matriz) para aplicar la función a todas las


entradas de la matriz
apply(A, FUN=prod, MARGIN=1)

f=function(x) {sqrt(sum(x^2)) }
apply(A, FUN=f, MARGIN=2)
log(A)
apply(A, FUN=log, MARGIN= c(1, 2))

Operaciones del cálculo matricial

 Suma: +
 Producto por escalar: *
 Producto: %*%
 Traspuesta: t
 Determinante: det
 Inversa: solve
 Potencia: %^% del paquete expm
 Rango: qr(…)$rank

A+B

5*A

A%*%B

t(C)

det(A)

solve(A)

qr(B)$rank

install.packages(“expm”)
library(expm)

B%^%20

Resolución de sistemas de ecuaciones

Si A es una matriz cuadrada n x n y b es vector de longitud n,

solve(A, b): 𝑨−𝟏 ∙ 𝒃

solve(A, c(1,3 ))

Representación de datos cuantitativos


Notación

Representacion de la matriz de datos

Estadisticos para variables multidimensionales


X=data.frame(V1=c(1,1,2,3)), V2=c(-1,0,3,0)), V3=c(3,3,0,1))
X
sapply(X, mean)
sapply(X, var)
sapply(X, sd)

var_ver=function(x){var(x)*(length(x)-1/ length(x)-)}
sd_ver=function(x){sqrt(var_ver(x))}
sapply(X, var_ver)
sapply(X, sd_ver)

Tipificación de una tabla de datos multidimensional


scale(X, center=…, scale=…)

X: Matriz o tabla de datos


center: Vector que restamos a las columnas. center=TRUE(defecto), restamos el
vector de medias. center=FALSE, no restamos nada
scale: Vector por el que dividimos la matriz.scale= TRUE(defecto), dividimos por las
desviaciones típicas muestrales. scale = FALSE, no dividimos por nada.

scale(X)
apply(scale(X), 2, mean)
apply(scale(X), 2, var)
apply(scale(X, center=TRUE, scale=FALSE)
Factores
Los factores son un tipo especial de vectores que permiten analizar un conjunto de
datos clasificados según las características que definen el factor.
Un factor es una estructura de datos utilizada para campos que solo toma un
número finito predefinido de valores (datos categóricos). Por ejemplo: un campo de
datos como el estado civil puede contener solo valores de soltero, casado,
separado, divorciado o viudo.
En tal caso, conocemos los posibles valores de antemano y estos valores distintos
predefinidos se denominan niveles. El siguiente es un ejemplo de factor en R.
x
[1] single married married single
Levels: married single
Aquí, podemos ver que el factor x tiene cuatro elementos y dos niveles. Podemos
verificar si una variable es un factor o no utiliza la función class().

Del mismo modo, los niveles de un factor se pueden verificar utilizando la función
levels()
> class(x)
[1] "factor"
> levels(x)
[1] "married" "single"

¿Cómo crear un factor en R?


Podemos crear un factor usando la función factor(). Los niveles de un factor se
infieren de los datos si no se proporcionan.
x <- factor(c("single", "married", "married", "single"))
x
[1] single married married single
Levels: married single
x <- factor(c("single", "married", "married", "single"), levels = c("single", "married",
"divorced"))
>x
[1] single married married single
Levels: single married divorced

Podemos ver en el ejemplo anterior que los niveles pueden estar predefinidos
incluso si no se usan.
Los factores están estrechamente relacionados con los vectores. De hecho, los
factores se almacenan como vectores enteros. Esto se ve claramente desde su
estructura str().

x <- factor(c("single","married","married","single"))
str(x)
Factor w/ 2 levels "married","single": 2 1 1 2

Vemos que los niveles se almacenan en un vector de caracteres y los elementos


individuales se almacenan realmente como índices.
Los factores también se crean cuando leemos columnas no numéricas en un marco
de datos.
Por defecto, la función data.frame() convierte el vector de caracteres en factor. Para
suprimir este comportamiento, tenemos que pasar el argumento stringsAsFactors
= FALSE.
¿Cómo acceder a los componentes de un factor?
El acceso a los componentes de un factor es muy similar al de los vectores.
x
[1] single married married single
Levels: married single
> x[3] # access 3rd element
[1] married
Levels: married single
> x[c(2, 4)] # access 2nd and 4th element
[1] married single
Levels: married single
> x[-1] # access all but 1st element
[1] married married single
Levels: married single
> x[c(TRUE, FALSE, FALSE, TRUE)] # using logical vector
[1] single single
Levels: married single

¿Cómo modificar un factor?


Los componentes de un factor pueden modificarse mediante asignaciones simples.
Sin embargo, no podemos elegir valores fuera de sus niveles predefinidos.
x
[1] single married married single
Levels: single married divorced
> x[2] <- "divorced" # modify second element; x
[1] single divorced married single
Levels: single married divorced
> x[3] <- "widowed" # cannot assign values outside levels
Warning message:
In `[<-.factor`(`*tmp*`, 3, value = "widowed") :
invalid factor level, NA generated
>x
[1] single divorced <NA> single
Levels: single married divorced
Una solución a esto es agregar primero el valor al nivel.

> levels(x) <- c(levels(x), "widowed") # add new level


> x[3] <- "widowed"
>x
[1] single divorced widowed single
Levels: single married divorced widowed

S-ar putea să vă placă și