1. Instalacion de Paquetes

En este apartado se cargara los paquetes, para la lectura de archivos, los cuales

Para leer archivos ODS (OpenDocument Spreadsheet) en R, puedes se utiliza la biblioteca readODS. Las extension de los archivos a leer son “.ods”. A continuacion se muestra la instalacion de la libreria, el cual se hace por unica vez. Luego se usa el comando library con el nombre de la libreria, para cargar la libraria para usarla:

# Instalar la biblioteca readODS
install.packages("readODS",repos = "https://cloud.r-project.org/")
# Cargar la biblioteca readODS
library(readODS)
## Warning: package 'readODS' was built under R version 4.3.2


Para leer archivos Excel en R, puedes utilizar la biblioteca readxl. Las extension de los archivos a leer son “.xls”.A continuacion se muestra la instalacion de la libreria, el cual se hace por unica vez. Luego se usa el comando library con el nombre de la libreria, para cargar la libraria para usarla:

# Instalar la biblioteca readxl
install.packages("readxl",repos = "https://cloud.r-project.org/")
#Cargar la biblioteca readxl
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.2


Para leer y escribir archivos Excel en R, puedes utilizar la biblioteca openxlsx. Las extension de los archivos a leer son “.xls” y “.xlsx”. A continuacion se muestra la instalacion de la libreria, el cual se hace por unica vez. Luego se usa el comando library con el nombre de la libreria, para cargar la libraria para usarla:

# Instalar la biblioteca openxlsx
install.packages("openxlsx",repos = "https://cloud.r-project.org/")
# Cargar la biblioteca openxlsx
library(openxlsx)
## Warning: package 'openxlsx' was built under R version 4.3.2


Para leer y escribir datos en varios formatos de archivo en R, incluidos CSV, Excel, SPSS, Stata, y más, se puede utilizar la biblioteca rio. Esta biblioteca es útil porque simplifica el proceso de lectura y escritura de datos en diferentes formatos, al proporcionar una función (import()) que automáticamente detecta el formato del archivo y carga los datos de manera adecuada.

Primero, necesitas instalar y cargar la biblioteca rio, lo cual se hace con los siguientess comandos:

# Instalar la biblioteca rio si aún no está instalada
install.packages("rio",repos = "https://cloud.r-project.org/")
# Cargar la biblioteca rio
library(rio)
## Warning: package 'rio' was built under R version 4.3.2


2. Descarga de Archivos

Para la descarga de los archivos se hara de la siguiente direccion:

Link: Sergio Camiz

En el apartado de datos, se buscara las siguiente data, la cual se tendra de descargar:

  • Pielescuero (24-04-2021)


Empezaremos a leer el archivo con extension .ods, para lo cual usamos el comando read_ods, con la ruta del archivo a leer. Luego de la lectura se mostrara los primero 10 valores de la tabla con el comando head. Para esto previamente esta cargado la libreria readODS

# Especificar la ruta del archivo ODS
ruta_archivo <-"C:/Users/GL2/Downloads/R IMCA/TAREA 2/Pielescuero/Pielescuero.ods"


# Leer el archivo ODS
datos_ods<-read_ods(ruta_archivo)
# Verificar la estructura de los datos
str(datos_ods)
## tibble [173 × 5] (S3: tbl_df/tbl/data.frame)
##  $ Exportacion : num [1:173] 1 2 1 1 1 1 1 1 1 2 ...
##  $ Tamano      : num [1:173] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Financiacion: num [1:173] 2 2 2 2 2 2 2 2 2 2 ...
##  $ Zona        : num [1:173] 2 3 2 2 1 3 3 3 1 1 ...
##  $ Actividad   : num [1:173] 4 3 3 3 3 3 3 3 4 3 ...
# Visualizar los primeros registros de los datos
head(datos_ods)


Ahora leemos el archivo con extension .xlsx, para lo cual usamos el comando read_excel, con la ruta del archivo a leer. Luego de la lectura se mostrara los primero 10 valores de la tabla con el comando head. Para esto previamente esta cargado la libreria readxl

# Especificar la ruta del archivo Excel
ruta_archivo <- "C:/Users/GL2/Downloads/R IMCA/TAREA 2/Pielescuero/Pielescuero.xlsx"

# Leer el archivo Excel
datos_excel <- read_excel(ruta_archivo)
# Verificar la estructura de los datos
str(datos_excel)
## tibble [173 × 5] (S3: tbl_df/tbl/data.frame)
##  $ Exportacion : num [1:173] 1 2 1 1 1 1 1 1 1 2 ...
##  $ Tamano      : num [1:173] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Financiacion: num [1:173] 2 2 2 2 2 2 2 2 2 2 ...
##  $ Zona        : num [1:173] 2 3 2 2 1 3 3 3 1 1 ...
##  $ Actividad   : num [1:173] 4 3 3 3 3 3 3 3 4 3 ...
# Visualizar los primeros 10 registros de los datos
head(datos_excel,n=10)


Ahora leemos el archivo con extension .csv, para lo cual usamos el comando read_excel, con la ruta del archivo a leer. Luego de la lectura se mostrara los primero 10 valores de la tabla con el comando head. Para esto previamente esta cargado la libreria readxl

# Leer datos desde un archivo CSV
datos_csv <- import("C:/Users/GL2/Downloads/R IMCA/TAREA 2/Pielescuero/Pielescuero.csv")
# Verificar la estructura de los datos
str(datos_csv)
## 'data.frame':    173 obs. of  5 variables:
##  $ Exportacion : int  1 2 1 1 1 1 1 1 1 2 ...
##  $ Tamano      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Financiacion: int  2 2 2 2 2 2 2 2 2 2 ...
##  $ Zona        : int  2 3 2 2 1 3 3 3 1 1 ...
##  $ Actividad   : int  4 3 3 3 3 3 3 3 4 3 ...
# Visualizar los primeros registros de los datos
head(datos_csv)
# Leer un archivo CSV y almacenar los datos en un objeto llamado 'datos'
datos <- read.csv("C:/Users/GL2/Downloads/R IMCA/TAREA 2/Pielescuero/Pielescuero.csv")

# Verificar la estructura de los datos
str(datos)
## 'data.frame':    173 obs. of  5 variables:
##  $ Exportacion : int  1 2 1 1 1 1 1 1 1 2 ...
##  $ Tamano      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Financiacion: int  2 2 2 2 2 2 2 2 2 2 ...
##  $ Zona        : int  2 3 2 2 1 3 3 3 1 1 ...
##  $ Actividad   : int  4 3 3 3 3 3 3 3 4 3 ...
# Visualizar los primeros registros de los datos
head(datos)


3. Manejo de Matrices

En R, una matriz es una estructura de datos bidimensional que contiene elementos del mismo tipo. Puedes pensar en una matriz como una colección rectangular de elementos organizados en filas y columnas.

Para la creacion de una matriz de nrow filas y ncol columnas, se usara el comando: \[matrix(secuencia, nrow=... , ncol=... )\]

# Crear una matriz de 3 filas y 2 columnas, con una secuencia de 1 al 6
matriz <- matrix(1:6, nrow = 3, ncol = 2)
#mostrando matriz
matriz
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6


A continuacion se presenta un ejemplo de generacion de una matrix de dimension 3x4, que toma valores aleatorios entre 1 a 12, NO pudiendo tomar valores repetidos.

# Especificando las dimensiones de la matriz
filas <- 3
columnas <- 4

# Crear una matriz de dimensiones filas x columnas con valores aleatorios entre 1 y 12
matriz_azar <- matrix(sample(1:12, filas * columnas, replace = FALSE), nrow = filas, ncol = columnas)
# Mostrando la matriz
matriz_azar
##      [,1] [,2] [,3] [,4]
## [1,]   10    2    7    6
## [2,]   11    9    8    5
## [3,]    4    3   12    1


Ahora se creara dos matrices A y B, de igual numero de fila y columna. Para nuestro caso sera de dimension 5x5

# Especificando las dimensiones de la matriz
filas <- 5
columnas <- 5

# Crea matriz de dimensiones filasxcolumnas con valores aleatorios entre 1 y filas*columnas
A <- matrix(sample(1:(filas*columnas), filas * columnas, replace = FALSE), nrow = filas, ncol = columnas)
B <- matrix(sample(1:(filas*columnas), filas * columnas, replace = FALSE), nrow = filas, ncol = columnas)
# Mostrar la matriz A
A
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    3   20   15    6    2
## [2,]   24   17    7   25   11
## [3,]   22   19    9   16   13
## [4,]    5   12   18    4    1
## [5,]   10   21   14    8   23
# Mostrar la matriz B
B
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   20    3   13    5   25
## [2,]    8    9   10   15   22
## [3,]   12    7   21   11    2
## [4,]    1   16   19   23   18
## [5,]   17    6   24    4   14

Ahora se procedera ha hacer las operaciones basicas entre la matrices A y B.

#Suma de matrices
A+B
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   23   23   28   11   27
## [2,]   32   26   17   40   33
## [3,]   34   26   30   27   15
## [4,]    6   28   37   27   19
## [5,]   27   27   38   12   37
#Sustracion de matrices
A-B
##      [,1] [,2] [,3] [,4] [,5]
## [1,]  -17   17    2    1  -23
## [2,]   16    8   -3   10  -11
## [3,]   10   12  -12    5   11
## [4,]    4   -4   -1  -19  -17
## [5,]   -7   15  -10    4    9
#Multiplicacion de matrices punto a punto
A*B
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   60   60  195   30   50
## [2,]  192  153   70  375  242
## [3,]  264  133  189  176   26
## [4,]    5  192  342   92   18
## [5,]  170  126  336   32  322
#Division de matrices punto a punto
A/B
##           [,1]     [,2]      [,3]     [,4]       [,5]
## [1,] 0.1500000 6.666667 1.1538462 1.200000 0.08000000
## [2,] 3.0000000 1.888889 0.7000000 1.666667 0.50000000
## [3,] 1.8333333 2.714286 0.4285714 1.454545 6.50000000
## [4,] 5.0000000 0.750000 0.9473684 0.173913 0.05555556
## [5,] 0.5882353 3.500000 0.5833333 2.000000 1.64285714
#Elevar una matriz a otra matriz punto a punto
A^B
##              [,1]         [,2]         [,3]         [,4]         [,5]
## [1,] 3.486784e+09 8.000000e+03 1.946195e+15 7.776000e+03 3.355443e+07
## [2,] 1.100753e+11 1.185879e+11 2.824752e+08 9.313226e+20 8.140275e+22
## [3,] 1.285500e+16 8.938717e+08 1.094190e+20 1.759219e+13 1.690000e+02
## [4,] 5.000000e+00 1.848843e+17 7.082353e+23 7.036874e+13 1.000000e+00
## [5,] 1.000000e+17 8.576612e+07 3.214200e+27 4.096000e+03 1.159284e+19


Ahora se procede a crear dos matrices A y B, pero con diferentes fila y columnas. La dimension de la matriz A sera de 3x5 y la dimension de la matriz B sera de 5x3

# Creacion de las matrices A y B
A <- matrix(sample(1:(3*5), 3*5, replace = FALSE), nrow = 3, ncol = 5)
B <- matrix(sample(1:(5*3), 5*3, replace = FALSE), nrow = 5, ncol = 3)
# Mostrar la matriz A
A
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1   13    8    3    7
## [2,]   11   15   14    9    4
## [3,]    6   12    2   10    5
# Mostrar la matriz B
B
##      [,1] [,2] [,3]
## [1,]    6   14    3
## [2,]    5    8    7
## [3,]    1   12   13
## [4,]   15    9   11
## [5,]    2    4   10


Ahora se procedera ha hacer las operaciones basicas entre la matrices A y B. Ahora veremos que no se puede hacer estas operaciones.

#Suma de matrices
#A+B, A-B, A*B, A/B y A^B arrojan error al compilar


Ahora se procede a crear dos matrices A y B.La dimension de la matriz A sera de 3x5 y la dimension de la matriz B sera de 5x3, y se procedera a ejecutar la multiplicacion clasica de metrices.

# Creacion de las matrices A y B
A <- matrix(sample(1:(3*5), 3*5, replace = FALSE), nrow = 3, ncol = 5)
B <- matrix(sample(1:(5*3), 5*3, replace = FALSE), nrow = 5, ncol = 3)
#Multiplicacion de matrices clasica
A%*%B
##      [,1] [,2] [,3]
## [1,]  387  209  306
## [2,]  491  276  245
## [3,]  414  280  224


Ahora se procede a crear dos matrices A de dimension 3x5, luego se mostrara la matriz transpuesta, usando el comando t(A).

# Creacion de las matrices A
A <- matrix(sample(1:(3*5), 3*5, replace = FALSE), nrow = 3, ncol = 5)
# Mostrar la matriz A
A
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    6    1    2    8   10
## [2,]   12   13    7    3    4
## [3,]    9   11    5   14   15
#Matriz transpuesta
t(A)
##      [,1] [,2] [,3]
## [1,]    6   12    9
## [2,]    1   13   11
## [3,]    2    7    5
## [4,]    8    3   14
## [5,]   10    4   15


Para crear una matriz aleatoria en R, puedes utilizar la función matrix() junto con la función runif() para generar números aleatorios. La funcion de runif() genera números aleatorios distribuidos uniformemente en el intervalo [0, 1]. Para este ejemplo se crearan la matriz A y B de dimensiones 3x5

# Definir las dimensiones de la matriz
filas <- 3
columnas <- 5

# Generar una matriz aleatoria de dimensiones filas x columnas
A<- matrix(runif(filas * columnas), nrow = filas, ncol = columnas)
B<- matrix(runif(filas * columnas), nrow = filas, ncol = columnas)
# Imprimir la matriz aleatoria A
A
##           [,1]      [,2]      [,3]      [,4]       [,5]
## [1,] 0.4282841 0.1381348 0.3859572 0.8578896 0.64570904
## [2,] 0.6144855 0.4106445 0.6010868 0.8621028 0.55355383
## [3,] 0.8616574 0.5234380 0.9699642 0.2704537 0.01046408
# Imprimir la matriz aleatoria B
B
##             [,1]      [,2]      [,3]      [,4]      [,5]
## [1,] 0.002645561 0.2430308 0.9224328 0.4829682 0.0179105
## [2,] 0.669810969 0.4090247 0.1488248 0.2243316 0.1478095
## [3,] 0.564820147 0.4497742 0.9438986 0.1549531 0.1520368

Ahora con las matrices A y B se haran las operaciones: +, -, * , / y ^.

#Suma de matrices
A+B
##           [,1]      [,2]      [,3]      [,4]      [,5]
## [1,] 0.4309296 0.3811656 1.3083900 1.3408578 0.6636195
## [2,] 1.2842965 0.8196692 0.7499117 1.0864345 0.7013634
## [3,] 1.4264775 0.9732122 1.9138628 0.4254069 0.1625009
#Sustracion de matrices
A-B
##             [,1]        [,2]        [,3]      [,4]       [,5]
## [1,]  0.42563850 -0.10489606 -0.53647561 0.3749213  0.6277985
## [2,] -0.05532547  0.00161978  0.45226199 0.6377712  0.4057443
## [3,]  0.29683723  0.07366376  0.02606564 0.1155006 -0.1415727
#Multiplicacion de matrices punto a punto
A*B
##             [,1]      [,2]       [,3]       [,4]        [,5]
## [1,] 0.001133052 0.0335710 0.35601960 0.41433342 0.011564972
## [2,] 0.411589130 0.1679638 0.08945665 0.19339694 0.081820531
## [3,] 0.486681449 0.2354289 0.91554785 0.04190765 0.001590926
#Division de matrices punto a punto
A/B
##             [,1]      [,2]      [,3]     [,4]        [,5]
## [1,] 161.8877752 0.5683837 0.4184123 1.776286 36.05198119
## [2,]   0.9174014 1.0039601 4.0388878 3.842984  3.74504836
## [3,]   1.5255429 1.1637794 1.0276149 1.745390  0.06882601
#Elevar una matriz a otra matriz punto a punto
A^B
##           [,1]      [,2]      [,3]      [,4]      [,5]
## [1,] 0.9977592 0.6181119 0.4155374 0.9286445 0.9921964
## [2,] 0.7216769 0.6948612 0.9270440 0.9672614 0.9162977
## [3,] 0.9193390 0.7473995 0.9716251 0.8165843 0.4999445


Ahora con las matrices aleatorias A y B se calcularan A%%B , t(A)%%B , A%%t(B) , B%%t(A) , **t(B)%*%A**.

#Multiplicacion de matrices clasica, no ase puede hacer esta operacion por la
#dimension no es correcta
#A%*%B
#Multiplicacion clasica de la transpuesta de A con B.
t(A)%*%B
##           [,1]      [,2]      [,3]      [,4]       [,5]
## [1,] 0.8994036 0.7429773 1.2998312 0.4782127 0.22950121
## [2,] 0.5710680 0.4369637 0.6826065 0.2399436 0.14275306
## [3,] 0.9514910 0.7759238 1.3610241 0.4715469 0.24322928
## [4,] 0.7324732 0.6827581 1.1749287 0.6496380 0.18391115
## [5,] 0.3783950 0.3880509 0.6878828 0.4376580 0.09497643
#Multiplicacion clasica de A con transpuesta de B.
A%*%t(B)
##          [,1]      [,2]      [,3]
## [1,] 0.816622 0.6887036 0.8994416
## [2,] 1.082170 0.9442270 1.3168822
## [3,] 1.155026 0.9978194 1.6811568
#Multiplicacion clasica de B con la transpuesta de A
B%*%t(A)
##           [,1]     [,2]      [,3]
## [1,] 0.8166220 1.082170 1.1550259
## [2,] 0.6887036 0.944227 0.9978194
## [3,] 0.8994416 1.316882 1.6811568
#Multiplicacion clasica de la transpuesta de B con A
t(B)%*%A
##           [,1]      [,2]      [,3]      [,4]       [,5]
## [1,] 0.8994036 0.5710680 0.9514910 0.7324732 0.37839502
## [2,] 0.7429773 0.4369637 0.7759238 0.6827581 0.38805087
## [3,] 1.2998312 0.6826065 1.3610241 1.1749287 0.68788280
## [4,] 0.4782127 0.2399436 0.4715469 0.6496380 0.43765805
## [5,] 0.2295012 0.1427531 0.2432293 0.1839112 0.09497643


Para crear una matriz aleatoria en R, puedes utilizar la función matrix() junto con la función runif() para generar números aleatorios. La funcion de runif() genera números aleatorios distribuidos uniformemente en el intervalo [0, 1]. Para este ejemplo se crearan la matriz C y D de dimensiones 2x4

# Definir las dimensiones de la matriz
filas <- 2
columnas <- 4

# Generar una matriz aleatoria de dimensiones filas x columnas
C<- matrix(runif(filas * columnas), nrow = filas, ncol = columnas)
D<- matrix(runif(filas * columnas), nrow = filas, ncol = columnas)
# Imprimir la matriz aleatoria C
C
##            [,1]      [,2]      [,3]      [,4]
## [1,] 0.01350275 0.8895722 0.3468937 0.7362559
## [2,] 0.04487313 0.4836048 0.5078876 0.1370228
# Imprimir la matriz aleatoria D
D
##           [,1]       [,2]      [,3]       [,4]
## [1,] 0.7524368 0.61386972 0.2953955 0.06604262
## [2,] 0.8624734 0.05728807 0.4364830 0.45756792

Ahora con las matrices aleatorias C y D se calcularan t(C)%\(*\)%D, C%\(*\)%t(D), C%\(*\)%t(D), t(C)%\(*\)%D.

#Multiplicacion clasica de la transpuesta de C con D.
t(C)%*%D
##            [,1]       [,2]       [,3]       [,4]
## [1,] 0.04886184 0.01085962 0.02357501 0.02142426
## [2,] 1.08644312 0.57378622 0.47386088 0.28003172
## [3,] 0.69905508 0.24204341 0.32415512 0.25530283
## [4,] 0.67216453 0.45981499 0.27729478 0.11132150
#Multiplicacion clasica de C con transpuesta de D.
C%*%t(D)
##           [,1]      [,2]
## [1,] 0.7073365 0.5509079
## [2,] 0.4897116 0.3507882
#Multiplicacion clasica de C con la transpuesta de D
C%*%t(D)
##           [,1]      [,2]
## [1,] 0.7073365 0.5509079
## [2,] 0.4897116 0.3507882
#Multiplicacion clasica de la transpuesta de C con D
t(C)%*%D
##            [,1]       [,2]       [,3]       [,4]
## [1,] 0.04886184 0.01085962 0.02357501 0.02142426
## [2,] 1.08644312 0.57378622 0.47386088 0.28003172
## [3,] 0.69905508 0.24204341 0.32415512 0.25530283
## [4,] 0.67216453 0.45981499 0.27729478 0.11132150


Ahora extraeremos de A una submatriz F de 2 filas y 3 columnas utilizando la escritura A[1:2,1:3]

#Extracion de una submatriz de 2x3
F<-A[1:2,1:3]
# Imprimir la submatriz F
F
##           [,1]      [,2]      [,3]
## [1,] 0.4282841 0.1381348 0.3859572
## [2,] 0.6144855 0.4106445 0.6010868


Como la dimension de C es 2, 4 y la dimension de A es 3, 5, asi cualquier combinacion de transpuestas, no tiene la dimension correcta para la multiplicacion clasica para C%\(*\)%A, t(C)%\(*\)%A, C%\(*\)%t(A), t(C)%\(*\)%t(A).

Como la dimension de la matriz C es 2, 4 y la dimension de la matriz F es 2, 3, asi la unica forma de multiplicar el producto de filaa por columna es t(C)%*%F.