R puede hacer todas las operaciones básicas de aritmética, pero la importancia de esto radica en que estos procedimientos pueden ser combinados con todas las paqueterías de R, haciendo que una simple suma se repita n cantidad de veces a lo largo de una base de datos, o que podamos multiplicar un factor sobre toda la columna de una tabla.
# Suma
3 + 5
## [1] 8
# Resta
5 - 2
## [1] 3
# Multiplicacion
8 * 9
## [1] 72
# Division
6 / 2
## [1] 3
# Modulo
4 %% 3
## [1] 1
# Potenciacion
3 ^ 4
## [1] 81
# Operaciones compuestas
(20 + 2) / 5
## [1] 4.4
La estructura de datos es fundamental en R y en el procesamiento de datos en general, no todas las variables pueden ser tratadas de la misma forma, algunas técnicas estadísticas, por ejemplo, no son susceptibles a ser usadas en variables categóricas, por lo que solo podrán ser analizadas a través de métodos cuantitativos, y viceversa.
Para trabajar con variables es necesario asignarlas a un
objeto a través de <-. De esta forma,
es posible hacer toda una serie de operaciones.
a <- 8
b <- 2
c <- 4
# Sustituyendo
(a * b) / c
## [1] 4
Es posible asignar todo tipo de variables a objetos en R. Sin embargo, no se debe perder de vista el tipo de variable que están representando, en R se les conoce como:
Además se tienen objetos de tipo Factor que no son propiamente variables, pero permiten analizar datos categóricos en algunas paqueterías para realizar ejercicios más complejos.
Para conocer la naturaleza de un objeto se usa
class()
# Numeric
x <- 1.2
class(x)
## [1] "numeric"
# Integer
y <- 1
class(y)
## [1] "numeric"
# Character
z <- "Hola mundo"
class(z)
## [1] "character"
# Complex
w <- 3 + 2i
class(w)
## [1] "complex"
# Logical
a <- 5
b <- 10
c <- a < b
class(c)
## [1] "logical"
# Factor
sex <- c("Hombre", "Mujer")
as.factor(sex)
## [1] Hombre Mujer
## Levels: Hombre Mujer
Una variable puede tener asignado más de un valor por lo que es
necesario crear vectores esto es particularmente útil
cuando analizamos bases de datos grandes. Para declarar un vector se
utiliza la palabra reservada c seguida de un paréntesis
donde se colocan los elementos del vector separados por coma. Recuerde
que un vector puede aceptar todo tipo de objetos.
v_integer <- c(1,2,3,4,5)
v_string <- c("ingreso", "ahorro", "consumo")
v_boolean <- c(TRUE, FALSE, TRUE)
walmex <- c(-200, 250, -300, 200, 1500)
femsa <- c(-100, 150, -400, 120, 150)
Cada una de las ganancias representa un día de la semana, por lo que
sería más comprensible la información si nombramos los elementos del
vector con names()
names(walmex) <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
print(walmex)
## Lunes Martes Miercoles Jueves Viernes
## -200 250 -300 200 1500
names(femsa) <- c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes")
print(femsa)
## Lunes Martes Miercoles Jueves Viernes
## -100 150 -400 120 150
ingresos <- walmex + femsa
print(ingresos)
## Lunes Martes Miercoles Jueves Viernes
## -300 400 -700 320 1650
El miercoles se perdieron $700, pero el viernes se ganaron $1650
sum()total_walmex <- sum(walmex)
total_walmex
## [1] 1450
total_femsa <- sum(femsa)
total_femsa
## [1] -80
Con las acciones de Walmart se ganaron $1,450 y con femsa se perdieron $80
total_ingresos <- total_walmex + total_femsa
total_ingresos
## [1] 1370
El total de ingresos fue de $1,370 pesos
total_walmex > total_femsa
## [1] TRUE
Las ganancias de Walmart son mayores que las de Femsa
Para seleccionar un elemento dentro de un vector se usa
[] tomando en cuenta que los elementos se numeran de 1 en
adelante
walmex_viernes <- walmex[5]
walmex_viernes
## Viernes
## 1500
El viernes se ganaron $1,500 pesos
Para seleccionar un elemento dentro de un vector se usa
[x,y] para hacer una selección exacta, o [x:z]
para seleccionar un recorrido
walmex_mmj <- walmex[c(2,3,4)]
walmex_mmj
## Martes Miercoles Jueves
## 250 -300 200
walmex_mmj <- walmex[c(2:4)]
walmex_mmj
## Martes Miercoles Jueves
## 250 -300 200
Las ganancias y pérdidas del martes, miercoles y jueves son $250, -$300 y $200 pesos respectivamente.
Se puede seleccionar a través de los nombres que se asignaron a cada
elemento del vector a traves de names()
walmex_l <- walmex["Lunes"]
walmex_l
## Lunes
## -200
Las pérdidas fueron de $200 pesos
walmex > 100
## Lunes Martes Miercoles Jueves Viernes
## FALSE TRUE FALSE TRUE TRUE
Con Walmart los días que obtuvimos más de $100 pesos fueron el martes, el jueves y el viernes
femsa^2
## Lunes Martes Miercoles Jueves Viernes
## 10000 22500 160000 14400 22500
El miercoles se ganaron $1,600 pesos
Los vectores también pueden ser creados con la función
seq() que permite crear secuencias personalizadas a manera
de, por ejemplo, sucesiones aritméticas.
seq(1, 30, by = 1)
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30
seq(1, 40, by = 5)
## [1] 1 6 11 16 21 26 31 36
mean()mean(femsa)
## [1] -16
En promedio Walmart obtuvo pérdidas de -$16 pesos durante la semana
sd()sd(femsa)
## [1] 238.8095
La desviación estándar es de más/menos $238.81 pesos
Al usar length.out se genera un vector de 5 números
iniciando desde el 1 al 10
seq(1, 10, length.out = 5)
## [1] 1.00 3.25 5.50 7.75 10.00
Una forma más sencilla de crear una secuencia de números es con
:
-7:7
## [1] -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7
A través de la función rep() se pueden generar vectores
con valores repetidos, por ejemplo, si se quiere un vector donde el 2 se
repita diez veces se usa
rep(2,10)
## [1] 2 2 2 2 2 2 2 2 2 2
Se puede ocupar esta misma función con strings
rep("hola", 3)
## [1] "hola" "hola" "hola"
Si lo que quieres es repetir una secuencia se usa
rep(1:3, 4)
## [1] 1 2 3 1 2 3 1 2 3 1 2 3
Se pueden repetir los elementos al interior de una secuencia, por ejemplo, aquí se repiten dos veces cada elemento del vector
rep(1:4, each = 2)
## [1] 1 1 2 2 3 3 4 4
Una matriz es un conjunto bidimensional de números. Dado que puede definirse tanto la suma como el producto de matrices, en mayor generalidad se dice que son elementos de un anillo. Una matriz se representa por medio de una letra mayúscula (A,B, …) y sus elementos con la misma letra en minúscula (a,b, …), con un doble subíndice donde el primero indica la fila y el segundo la columna a la que pertenece.
Existen dos formas para declarar matrices en R, una por columnas y otra por filas.
\[ A = \begin{equation} \begin{pmatrix} a_{11} & a_{12} & ... & a_{1n}\\ a_{21} & a_{22} & ... & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & ... & a_{mn} & \end{pmatrix} \end{equation} \]
Se utiliza la función matrix() para declarar una matriz,
esta función tiene varias parámetros: el primero es data,
hace referencia al vector que contiene los datos de la matriz; el
segundo es nrow, indica el número de filas que contenie la
matriz; el tercero, ncol representa el número de columnas
que contiene la matriz; y el último, byrow indica si el
vector data está ordenado por filas o columnas
# Por columnas
a <- c(1,2,3,4,8,5,9,10,8)
A <- matrix(data = a,
nrow = 3,
ncol = 3,
byrow = FALSE)
A
## [,1] [,2] [,3]
## [1,] 1 4 9
## [2,] 2 8 10
## [3,] 3 5 8
# Por filas
b <- c(1,4,9,2,8,10,3,5,8)
B <- matrix(data = b,
nrow = 3,
ncol = 3,
byrow = TRUE)
B
## [,1] [,2] [,3]
## [1,] 1 4 9
## [2,] 2 8 10
## [3,] 3 5 8
Con matrices es posible hacer un gran número de operaciones.
# Multiplicacion
A * B
## [,1] [,2] [,3]
## [1,] 1 16 81
## [2,] 4 64 100
## [3,] 9 25 64
# Suma
A + B
## [,1] [,2] [,3]
## [1,] 2 8 18
## [2,] 4 16 20
## [3,] 6 10 16
# Resta
A - B
## [,1] [,2] [,3]
## [1,] 0 0 0
## [2,] 0 0 0
## [3,] 0 0 0
# Transpuesta
t(A)
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 8 5
## [3,] 9 10 8
# Diagonal
diag(A)
## [1] 1 8 8
# Traza
sum(diag(A))
## [1] 17
# Determinante
det(A)
## [1] -56
# Inversa
solve(A)
## [,1] [,2] [,3]
## [1,] -0.25 -0.2321429 0.5714286
## [2,] -0.25 0.3392857 -0.1428571
## [3,] 0.25 -0.1250000 0.0000000
# Eigenvalores y eigenvectores
eigen(A)
## eigen() decomposition
## $values
## [1] 17.100890 -1.860757 1.759866
##
## $vectors
## [,1] [,2] [,3]
## [1,] -0.4741780 -0.9056452 0.4920372
## [2,] -0.6962798 -0.1970733 -0.7793662
## [3,] -0.5388410 0.3754582 0.3879275
Recuerda que muchas técnicas en estadística dependen de que las matrices sean cuadradas
# Multiplicacion de matrices
D <- matrix(data = c(1,2,2,4,2,1),
nrow = 3,
ncol = 2,
byrow = FALSE)
E <- matrix(data = c(5,4,6,1,8,9),
nrow = 2,
ncol = 3,
byrow = FALSE)
D %*% E
## [,1] [,2] [,3]
## [1,] 21 10 44
## [2,] 18 14 34
## [3,] 14 13 25
Toma en consideración que las matrices pueden ser resultas a manera de sistemas de ecuación, siempre y cuando estas sean cuadradas.
\[ 2x + 3y = 1 \] \[ 3x - 7y = 2 \]
Este sistema se puede representar como una matriz de tal fora que tenemos
\[ \begin{pmatrix} 2 & 3\\ 3 & -7
\end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} =\begin{pmatrix}1\\ 2
\end{pmatrix} \] Para resolver esta sistema de ecuaciones
declaramos las matrices de coeficientes y la de datos independientes, y
resolvemos con solve().
# Matriz de coeficientes
A <- matrix(c(2,3,3,-7), nrow = 2)
# Matriz de datos independientes
b <- matrix(c(1,2), nrow = 2)
# Solución del sistema
solve(A,b)
## [,1]
## [1,] 0.56521739
## [2,] -0.04347826
La solución es \[ \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} 0.56521739 \\ -0.04347826 \end{pmatrix} \]
B. Resuelve el siguiente sistema de ecuaciones con matrices
\[ 2x+y-z=6 \] \[ x+y+z=6 \] \[ -x-y+z=-4 \]
El sistema anterior, se puede expresar de la siguiente forma:
\[ \begin{pmatrix} 2 & 1& -1\\ 1 & 1&1 \\ -1 & -1 & 1 \end{pmatrix} \begin{pmatrix} x \\ y\\z \end{pmatrix} =\begin{pmatrix}6\\ 6 \\ -4 \end{pmatrix} \]
Entonces
A <- matrix(c(2,1,-1,1,1,1,-1,-1,1), ncol = 3, byrow = TRUE)
b <- matrix(c(6,6,-4), nrow = 3)
solve(A, b)
## [,1]
## [1,] 2
## [2,] 3
## [3,] 1
La solución es
\[ \begin{pmatrix} x \\ y \\z \end{pmatrix} = \begin{pmatrix} 2 \\ 3\\1 \end{pmatrix} \]
Otra forma de crear matrices es a través de vectores. Primero, se crean los vectores que contienen la información, después, se crea un vector que combine todos los vectores, finalmente, se crea la matriz.
A continuación se presentan las ganancias de tres empresas para dos trimestres diferentes
apple <- c(460.998, 314.4)
amazon <- c(290.475, 247.900)
pepsico <- c(309.306, 165.8)
ganancias <- c(apple,
amazon,
pepsico)
ganancias_mtx <- matrix(ganancias,
byrow = TRUE,
nrow = 3)
ganancias_mtx
## [,1] [,2]
## [1,] 460.998 314.4
## [2,] 290.475 247.9
## [3,] 309.306 165.8
Es posible poner nombres a las filas y columnas de la matriz creando los vectores que contengan los títulos.
trimestre <- c("T2",
"T3")
emisora <- c("Apple",
"Amazon",
"Pepsico")
colnames(ganancias_mtx) <- trimestre
rownames(ganancias_mtx) <- emisora
ganancias_mtx
## T2 T3
## Apple 460.998 314.4
## Amazon 290.475 247.9
## Pepsico 309.306 165.8
rowSums(). Podemos
poner este resultado en una variable.ganancia_total <- rowSums(ganancias_mtx)
ganancia_total
## Apple Amazon Pepsico
## 775.398 538.375 475.106
cbind()ganancias_tot <-cbind(ganancias_mtx,
ganancia_total)
ganancias_tot
## T2 T3 ganancia_total
## Apple 460.998 314.4 775.398
## Amazon 290.475 247.9 538.375
## Pepsico 309.306 165.8 475.106
A continuación se construye otra matriz con las ganancias de dos trimestres para tres nuevas emisoras
adobe <- c(474.5, 552.5)
nvidia <- c(310.7, 338.7)
microsoft <- c(380.3,468.5)
ganancias_mtx2 <- matrix(c(adobe,
nvidia,
microsoft),
nrow = 3,
byrow = TRUE)
trimestre2 <- c("T2",
"T3")
emisora2 <- c("Adobe",
"Nvidia",
"Microsoft")
colnames(ganancias_mtx2) <- trimestre2
rownames(ganancias_mtx2) <- emisora2
ganancias_mtx2
## T2 T3
## Adobe 474.5 552.5
## Nvidia 310.7 338.7
## Microsoft 380.3 468.5
rbind()tot_emisoras <- rbind(ganancias_mtx,
ganancias_mtx2)
tot_emisoras
## T2 T3
## Apple 460.998 314.4
## Amazon 290.475 247.9
## Pepsico 309.306 165.8
## Adobe 474.500 552.5
## Nvidia 310.700 338.7
## Microsoft 380.300 468.5
colsums()tot_ganancias_v <- colSums(tot_emisoras)
tot_ganancias_v
## T2 T3
## 2226.279 2087.800
Para seleccionar elementos al interior de una matriz usamos
[] tomando en cuenta que ahora debemos seleccionar filas y
columnas.
[1, 2] selecciona el elemento de la primera fila y la
segunda columna.tot_emisoras[1,2]
## [1] 314.4
Si [1:3, 2:4] da como resultado una matriz con los datos
en las filas 1, 2 y 3; y las columnas 2, 3, 4, entonces
tot_emisoras[4:5, 1:2]
## T2 T3
## Adobe 474.5 552.5
## Nvidia 310.7 338.7
Para seleccionar todos los elementos de la primera columna usamos
[,1] y para el caso de seleccionar la primera fila
[1,]
trim3 <- tot_emisoras[, 2]
trim3
## Apple Amazon Pepsico Adobe Nvidia Microsoft
## 314.4 247.9 165.8 552.5 338.7 468.5
app_ama <- tot_emisoras[1:2, 2]
app_ama
## Apple Amazon
## 314.4 247.9
mean(trim3)
## [1] 347.9667
mean(app_ama)
## [1] 281.15
activos <- tot_emisoras / 5
activos
## T2 T3
## Apple 92.1996 62.88
## Amazon 58.0950 49.58
## Pepsico 61.8612 33.16
## Adobe 94.9000 110.50
## Nvidia 62.1400 67.74
## Microsoft 76.0600 93.70
activos2 <- tot_emisoras * 2
activos2
## T2 T3
## Apple 921.996 628.8
## Amazon 580.950 495.8
## Pepsico 618.612 331.6
## Adobe 949.000 1105.0
## Nvidia 621.400 677.4
## Microsoft 760.600 937.0
A continuación se presenta una matriz con las acciones que compramos de cada una de las emisoras
acc_apple <- c(5, 5)
acc_amazon <- c(6, 6)
acc_pepsico <- c(7, 7)
acc_adobe <- c(4, 4)
acc_nvidia <- c(4, 4)
acc_microsoft <- c(4.9, 4.9)
acciones_emisoras <- matrix(c(acc_apple,
acc_amazon,
acc_pepsico,
acc_adobe,
acc_nvidia,
acc_microsoft),
nrow = 6,
byrow = TRUE)
trimestre3 <- c("T2",
"T3")
emisora3 <- c("Apple",
"Amazon",
"Pepsico",
"Adobe",
"Nvidia",
"Microsoft")
colnames(acciones_emisoras) <- trimestre3
rownames(acciones_emisoras) <- emisora3
acciones_emisoras
## T2 T3
## Apple 5.0 5.0
## Amazon 6.0 6.0
## Pepsico 7.0 7.0
## Adobe 4.0 4.0
## Nvidia 4.0 4.0
## Microsoft 4.9 4.9
ganacias_acciones <- tot_emisoras * acciones_emisoras
ganacias_acciones
## T2 T3
## Apple 2304.990 1572.00
## Amazon 1742.850 1487.40
## Pepsico 2165.142 1160.60
## Adobe 1898.000 2210.00
## Nvidia 1242.800 1354.80
## Microsoft 1863.470 2295.65
mean(ganacias_acciones)
## [1] 1774.809
Las listas en R son estructuras de datos que permiten almacenar
diferentes tipos de objetos como matrices, vectores, bases de datos u
otras listas, bajo un mismo nombre. Para declarar una lista en R, se
utiliza la función list(), y entre paréntesis se escriben
las variable separadas por coma. A continuación se crea una lista con
varias estructuras de datos, un vector, una matriz, un booleano y una
base de datos
my_boolean <- TRUE
my_vector <- 2:11
my_matrix <- matrix(2:10, ncol = 3)
data <- mtcars
my_df <- data[1:5,]
my_list <- list(bool = my_boolean,
vec = my_vector,
mat = my_matrix,
df = my_df)
my_list
## $bool
## [1] TRUE
##
## $vec
## [1] 2 3 4 5 6 7 8 9 10 11
##
## $mat
## [,1] [,2] [,3]
## [1,] 2 5 8
## [2,] 3 6 9
## [3,] 4 7 10
##
## $df
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Para obtener los valores de la lista, se escribe el nombre de la
lista seguido el símbolo de peso $ y luego el nombre de la
variable.
my_list$bool
## [1] TRUE
my_list$df
mov <- "Star Wars"
char <- c("Luke Skywalker", "Leia Organa", "Han Solo", "Darth Vader", "Yoda")
IMDb1 <- c(4.5, "IMDb1", "La mejor pelicula que he visto")
IMDb2 <- c(3.0, "IMDb2", "Me gustan más los Avengers")
IMDb3 <- c(5.0, "IMDb3", "Es lo máximo")
movies_matrix <- matrix(c(IMDb1, IMDb2, IMDb3),
nrow = 3,
byrow = TRUE)
movies_matrix
## [,1] [,2] [,3]
## [1,] "4.5" "IMDb1" "La mejor pelicula que he visto"
## [2,] "3" "IMDb2" "Me gustan más los Avengers"
## [3,] "5" "IMDb3" "Es lo máximo"
colnames() y
rownames()info <- c("Calif", "Fuente", "Coment")
number <- c("1", "2", "3")
colnames(movies_matrix) <- info
rownames(movies_matrix) <- number
rev <- movies_matrix
rev
## Calif Fuente Coment
## 1 "4.5" "IMDb1" "La mejor pelicula que he visto"
## 2 "3" "IMDb2" "Me gustan más los Avengers"
## 3 "5" "IMDb3" "Es lo máximo"
star_wars <- list(moviename = mov,
characters = char,
reviews = c(IMDb1, IMDb2, IMDb3))
star_wars
## $moviename
## [1] "Star Wars"
##
## $characters
## [1] "Luke Skywalker" "Leia Organa" "Han Solo" "Darth Vader"
## [5] "Yoda"
##
## $reviews
## [1] "4.5" "IMDb1"
## [3] "La mejor pelicula que he visto" "3"
## [5] "IMDb2" "Me gustan más los Avengers"
## [7] "5" "IMDb3"
## [9] "Es lo máximo"
star_wars$characters
## [1] "Luke Skywalker" "Leia Organa" "Han Solo" "Darth Vader"
## [5] "Yoda"
star_wars[["characters"]][2]
## [1] "Leia Organa"
star_wars_list_full <- c(star_wars, year=1980)
star_wars_list_full
## $moviename
## [1] "Star Wars"
##
## $characters
## [1] "Luke Skywalker" "Leia Organa" "Han Solo" "Darth Vader"
## [5] "Yoda"
##
## $reviews
## [1] "4.5" "IMDb1"
## [3] "La mejor pelicula que he visto" "3"
## [5] "IMDb2" "Me gustan más los Avengers"
## [7] "5" "IMDb3"
## [9] "Es lo máximo"
##
## $year
## [1] 1980
Un data frame es lo que popularmente conocemos como base de datos, existen varias formas de crearlas, ya sea importando una variedad de archivos a R como aquellos con extensión .xls, .csv., .prn, etc., o a través de la consola utilizando los códigos correspondientes para cada caso
{r setup, include = FALSE} knitr::opts_chunk$set(echo = TRUE)
Datos_Espacios <- read.csv("D:/Libros/Seminarios/Fastat/R Basico/Datos_Espacios.prn", sep = "")
#View(Datos_Espacios)
Datos_txt <- read.delim("D:/Libros/Seminarios/Fastat/R Basico/Datos_Espacios.txt")
#View(Datos_txt)
col_names = FALSE.# install.packages("readr")
library(readr)
Datos_csv <- read_csv("D:/Libros/Seminarios/Fastat/R Basico/Datos_Espacios.csv")
#View(Datos_csv)
# install.packages("readxl")
library(readxl)
Datos_xlsx <- read_excel("D:/Libros/Seminarios/Fastat/R Basico/Datos_Espacios.xlsx")
#View(Datos_xlsx)
Si lo que se desesa es importar un archivo desde RStudio se debe tener en cuenta las cuatro pantallas del IDE.
Para importar una base de datos sólo se debe acceder a
Environment > Import Dataset y se
selecciona el caso correspondiente, por ejemplo,
From text (base) si la base de datos es un texto,
From text (readr) para el caso de .csv, y
From text Excel para el caso de .xls. Después,
se busca el archivo que contiene nuestra base de datos, se revisa la
pantalla preliminar antes de abrirlo y se acepta.
Ahora bien, siempre que iniciamos el trabajo es recomendable explorar
la estructura de la base de datos con str()
str(Datos_xlsx)
## tibble [100 x 4] (S3: tbl_df/tbl/data.frame)
## $ genero : chr [1:100] "macho" "hembra" "hembra" "macho" ...
## $ Agua_dulce : num [1:100] 108 131 105 86 99 87 94 117 79 99 ...
## $ Mar_abierto: num [1:100] 368 355 469 506 402 423 440 489 432 403 ...
## $ origen : chr [1:100] "alaska" "alaska" "alaska" "alaska" ...
En este caso, todas las variables de la base de datos están definidas correctamente, pero en caso de no estarlo es fundamental hacerlo.
Datos_xlsx2 <- read_excel("D:/Libros/Seminarios/Fastat/R Basico/Datos_Espacios.xlsx",
sheet = "Hoja1",
col_types = c("numeric","text","skip","text"))
str(Datos_xlsx2)
## tibble [100 x 3] (S3: tbl_df/tbl/data.frame)
## $ genero : num [1:100] NA NA NA NA NA NA NA NA NA NA ...
## $ Agua_dulce: chr [1:100] "108" "131" "105" "86" ...
## $ origen : chr [1:100] "alaska" "alaska" "alaska" "alaska" ...
El paso anterior muestra lo delicado que puede llegar a ser este
procedimiento. Aquí se ha cometido el error de nombrar a la variable
genero como numérica cuando es character, de
ahí que R no pueda identificarla, y la variable Agua_dulce
ahora aparece como texto, cuando en realidad es numérica. Además, se
utilizó skip para omitir la variable
Mar_abierto. Nunca de por sentado que R puede clasificar
las variables de forma correcta automáticamente.
Si las columnas de una tabla que deseas importar no tienen nombre
utiliza col_names = FALSE.
# Datos <- read_excel("C:/Documents/Carpeta/name_excel.xlsx",
# sheet = "Hoja1",
# col_names = FALSE) # Se utiliza cuando las columnas no tienen nombre
Para trabajar adecuadamente usaremos la base de datos denominada como
Datos_xlsx. Para seleccionar datos en la base usamos
[],
Datos_xlsx[1,3]
Datos_xlsx[4,]
Datos_xlsx[,1:3]
Para agregar una nueva columna a un data frame ya
defindo se escribe el nombre del data frame seguido el símbolo
$ y a continuación el nombre de la nueva variable. Recuerda
que la base de datos debe ser cuadrada, así que la nueva variable debe
tener el mismo número de observaciones que las otras variables.
Agua_salada con una secuencia que
vaya del 1 al 100Datos_xlsx$Agua_salada <- c(1:100)
Datos_xlsx
Para borrar una columna, se escribe el nombre del data frame seguido el símbolo $ y a continuación el nombre de la columna y se le asigna el valor NULL, por ejemplo:
Datos_xlsx$Agua_salada <- NULL
Datos_xlsx
Es posible crear una base de datos a partir de vectores con la
función data.frame.
edo <- c("cdmx", "edomex", "oax", "chi", "aguasc", "jal", "nuevol", "michoa")
contamina <- c("alta", "alta", "baja", "baja", "regular", "regular", "regular", "regular")
pobla <- c(11, 20, 15, 17, 18, 9, 4, 3)
tamano <- c(58.64, 243.2, 154, 103, 413, 447.3, 756.6, 676.11)
narco <- c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
mex_df <- data.frame(edo,
contamina,
pobla,
tamano,
narco)
str(mex_df)
## 'data.frame': 8 obs. of 5 variables:
## $ edo : chr "cdmx" "edomex" "oax" "chi" ...
## $ contamina: chr "alta" "alta" "baja" "baja" ...
## $ pobla : num 11 20 15 17 18 9 4 3
## $ tamano : num 58.6 243.2 154 103 413 ...
## $ narco : logi FALSE FALSE FALSE FALSE TRUE TRUE ...
mex_df[2, 4]
## [1] 243.2
mex_df[ ,2]
## [1] "alta" "alta" "baja" "baja" "regular" "regular" "regular"
## [8] "regular"
Si las columnas estan nombradas, como en este caso, es posible llamarlas con su nombre
poblamex_df[1:5, "pobla"]
## [1] 11 20 15 17 18
mex_df[c(6:8), "contamina"]
## [1] "regular" "regular" "regular"
mex_df[c(3,4), ]
mex_df[1, ]
edomex_df$edo
## [1] "cdmx" "edomex" "oax" "chi" "aguasc" "jal" "nuevol" "michoa"
mex_df[ , 1:3]
mex_df[ , c(1,2)]
mex_df[c(1:3),]
mex_df[narco, "edo"]
## [1] "aguasc" "jal" "nuevol" "michoa"
mex_df[narco, TRUE]
Para hacer una subselección, es decir, un
subconjunto de toda nuestra base de datos se usa subset().
Es posible usar operadores comparativos para hacer
busquedas al interior de la base de datos
subset(mex_df, pobla < 10)
subset(mex_df, contamina == "baja")
subset(mex_df, contamina != "baja")
mex_df[mex_df$tamano > 400, ]
subset(mex_df, tamano > 400)
mex_df[mex_df$edo == "oax", ]
mex_df[mex_df$narco != TRUE, ]
Para filtrar más de una variable podemos usar & que
hace referencia a y, así como | el cual
indica o
mex_df[mex_df$contamina == "alta" &
mex_df$tamano < 100, ]
mex_df[mex_df$narco == TRUE &
mex_df$pobla >= 11, ]
mex_df[mex_df$pobla <= 15 |
mex_df$tamano >= 400, ]
mex_df[mex_df$narco == "FALSE" |
mex_df$contamina == "baja", ]
Para conocer la estadística descriptiva más básica
de nuestra base de datos se usa summary(). Esto también se
puede pedir por variable
summary(mex_df)
## edo contamina pobla tamano
## Length:8 Length:8 Min. : 3.00 Min. : 58.64
## Class :character Class :character 1st Qu.: 7.75 1st Qu.:141.25
## Mode :character Mode :character Median :13.00 Median :328.10
## Mean :12.12 Mean :356.48
## 3rd Qu.:17.25 3rd Qu.:504.50
## Max. :20.00 Max. :756.60
## narco
## Mode :logical
## FALSE:4
## TRUE :4
##
##
##
Observe que las variables cualitativas no cuentan con información, toda vez que no pueden ser sometidas al mismo análisis.
summary(mex_df$pobla)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.00 7.75 13.00 12.12 17.25 20.00
Para agregar una nueva columna a un data frame ya
defindo se escribe el nombre del data frame seguido el símbolo
$ y a continuación el nombre de la nueva variable. Recuerda
que la base de datos debe ser cuadrada, así que la nueva variable debe
tener el mismo número de observaciones que las demás.
mex_df$pobreza <- c("alta", "moderada", "baja", "alta", "moderada", "baja", "alta", "alta")
str(mex_df)
## 'data.frame': 8 obs. of 6 variables:
## $ edo : chr "cdmx" "edomex" "oax" "chi" ...
## $ contamina: chr "alta" "alta" "baja" "baja" ...
## $ pobla : num 11 20 15 17 18 9 4 3
## $ tamano : num 58.6 243.2 154 103 413 ...
## $ narco : logi FALSE FALSE FALSE FALSE TRUE TRUE ...
## $ pobreza : chr "alta" "moderada" "baja" "alta" ...
Para borrar una columna, se escribe el nombre del
data frame seguido el símbolo $ y a continuación el nombre
de la columna y se le asigna el valor NULL.
mex_df$pobreza <- NULL
mex_df
Para agregar una nueva fila a un data frame ya
defindo se utliza la función rbind() tal como se utilizó en
matrices.
verac <- c("Verac", "regular", 10.85, 20.21, FALSE)
mex_df <- rbind(mex_df, verac)
mex_df
Para borrar una fila se escribe el nombre del data
frame seguido el símbolo [], y entre los corchetes se
escribe el número de la fila que se desea eliminar con el signo
menos.
mex_df <- mex_df[-9,]
mex_df
Para ordenar los datos se usa order(), de esta forma es
posible conocer el nivel de cada uno de los elementos
de un vector. Si lo que se busca es ordenar de menor a mayor (de
A a Z)
order(mex_df$edo)
## [1] 5 1 4 2 6 8 7 3
edo[order(mex_df$edo)]
## [1] "aguasc" "cdmx" "chi" "edomex" "jal" "michoa" "nuevol" "oax"
pobla[order(mex_df$pobla)]
## [1] 11 15 17 18 20 3 4 9
No obstante, al agregar o quitar filas o columnas, la base de datos
puede pasar todas las variables como tipo character, en ese
caso, será necesario transformar cada una de las variables como
corresponda usando as.numeric y
as.character
x <- 2324 a
characterx <- 2324
str(x)
## num 2324
x <- as.character(x)
str(x)
## chr "2324"
y <- TRUE a
numericy <- TRUE
str(y)
## logi TRUE
y <- as.numeric(y)
str(y)
## num 1
Para realizar una gráfica se deben tener claras las variables a gráficar, ya sean numéricas o categóricas, en este caso se trabaja con las primeras.
x <- c(1,2,3,4,5)
y <- c(1,4,9,16,25)
plot(x, y, type = "o")
plot(x, y, type = "b")
plot(x, y, type = "s")
plot(x, y, type = "S")
plot(x, y, type = "l")
plot(x, y, type = "l", lty = 5)
plot(x, y, type = "l", lty = 1, lwd = 2)
plot(x, y, type = "l", lty = 1, lwd = 3, col = 10)
# Se pueden escoger diferentes tipos de puntos utilizando las siguientes sintaxis:
plot(x, y, pch = 0)
plot(x, y, pch = 16)
Es posible agregar algunos elementos a las gráficas para hacerlas más claras y darles una mejor presentación.
plot(x,
y,
type = "l",
main = "Título del gráfico",
sub = "Subtítulo del gráfico",
xlab = "Etiqueta del eje X",
ylab = "Etiqueta del eje Y")
curve((x), # Ley de asignación, (x) en R representa la función identidad
from = -5, # Inicio
to = 5, # Final
main= "Función identidad")
La función barplot(), se utiliza para realizar gráficos
de barra. Esta gráfica nos muestra la frecuencia con la que se han
observado los datos de una variable discreta. Suponga se tiene la
siguiente información
Femenino = 11 Masculino = 15
barplot(c(11,15),
names.arg = c("FEMENINO","MASCULINO"))
Para agregar más elementos se sigue la misma lógica que en las gráficas lineales
barplot(c(11,15),
names.arg = c("FEMENINO","MASCULINO"),
main = "Título del gráfico",
sub = "Subtítulo del gráfico",
xlab = "Etiqueta del eje X",
ylab = "Etiqueta del eje Y" )
La función hist(), se utiliza para realizar histograma.
Esta gráfica nos muestra la distribución de los datos usando barras.
Suponga que se tiene la información de la edad de 32 niños y se desea
conocer su distrución, para ello se utiliza el siguiente código:
variable_edad <- c(4,5,4,6,7,3,7,6,5,4,6,7,4,5,6,6,6,5,7,6,5,4,5,6,7,8,6,5,4,6,8,3)
hist(variable_edad,
main = "Título del gráfico",
sub = "Subtítulo del gráfico",
xlab = "Etiqueta del eje X",
ylab = "Etiqueta del eje Y")
La función pie(), se utiliza para realizar diagramas de
pastel. El primer argumento de esta función, son lo valores que
demarcarán las divisiones del círculo que representa el 100% del área.
Luego se indican los valores que determinarán la construcción de
etiquetas. En el siguiente ejemplo se muestra un diagrama de pastel:
porcentajes <- c(0.2,0.1,0.3,0.1,0.3) # Porcentajes asociados a cada persona
etiqueta_porcentajes <- c("Luis","Pedro","Juan","María","José")
pie(porcentajes,
labels = etiqueta_porcentajes,
main = "Título del gráfico",
sub = "Subtítulo del gráfico")
Una de las partes más poderosas de R es su gran paquetería, estas funcionan a manera de librerías que contienen un gran número de funciones cuyo objetivo es agilizar el análisis estadístico, facilitar el manejo de las bases de datos, graficas, mapas, etc.
Para hacer uso de las librerías de R primero debemos instalarlas con
install.packages() y cargarlas con library().
Ahora se instalara una de las librerías más utilizadas de R,
ggplot2 que permite hacer una gran cantidad de gráficas,
pero dejaremos este tema para otra ocasión,
# install.packages("ggplot2")
library("ggplot2")