Actividad 2

Karla Jazmín López Pasión

15 de octubre de 2021

Básicos en R

Antes que nada, debemos de conocer algunas de las principales partes que integran a RStudio. La siguiente imagen ilustra 4 de las principales partes:

Como podemos ver en la imagen anterior, las cuatro principales partes son el Script, la Consola, el Entorno y la sección donde se pueden mostrar algunas gráficas que realicemos.

Antes de comenzar, debemos de reconocer los colores que utiliza RStudio. Algunos de ellos son:

Las sentencias se verán de color azul.

El color rojo indica errores.

Mientras que los resultados se muestran en color negro.

Una vez conociendo esto, podemos empezar…

¿Cómo poner un comentario?

Para poner un comentario en R tienes que poner el simbolo de gato, es decir: “#”. Esto puede ser de utilidad para introducir un nuevo tema o comentar lo que estás haciendo con tu código.

# Esto es un comentario

¿Cómo correr un código?

Para que el código que escribiste se ejecute, puedes seleccionarlo y hacer click en \(Run\) o simplemente teclar \(Command + Enter\) o \(Ctrl + Enter\)

O, si escribes en la consola, bastará con teclar \(Enter\)

Operaciones aritmeticas

Lo anterior nos da paso a explicar algunas operaciones artimeticas que podemos realizar, por ejemplo, como ya se había mencionado, la suma de dos números

5+2 #Así se realiza la suma de dos números
## [1] 7

Como lo podrás notar, lo anterior ejecuta la suma y, además se puede poner un comentario en la misma línea utilizando \(#\)

La resta de dos números:

8-2
## [1] 6

La multiplicación de dos números:

2*4
## [1] 8

La división de dos números:

10/4
## [1] 2.5

También puedes elevar un número a la potencia que desees:

3^3
## [1] 27

Asignación de nombres a variables, tablas…

Y a alguna cosilla que se verá más adelante:

#Este es el operador de asignación: <- 

De la siguiente manera, podemos llamar \(xy\) al número \(10\) y \(z\) al número 2

xy <- 10
z <-2

Y ver qué valor tengo en mi variable \(xy\) escribiendo su nombre y corriendo el código:

xy
## [1] 10
z
## [1] 2

Asimismo, puedo hacer operaciones arimenticas con estas dos variables:

xy+z
## [1] 12
xy*z
## [1] 20
xy/z
## [1] 5
xy^z
## [1] 100

¿Cómo encontrar ayuda?

Dentro de RStudio

Podemos hacerlo de las siguientes maneras:

Signo de interrogación

Podemos escribir un signo de interrogación y la función de la cuál queremos obtener más información:

?seq

Y, una vez conociendo el significado y cómo aplicar seq, podemos utilizarla:

secuencia <- seq(from=1, to=10, by=0.5)

Podemos ver qué hemos hecho:

secuencia
##  [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0
## [16]  8.5  9.0  9.5 10.0

Hemos hecho una secuencia de números del 1 al 10 y que vayan aumentando en 0.5 unidades

Apropos

Si no recordamos cómo se llama el objeto o función, podemos hacer lo siguiente

apropos("sum")
##  [1] ".colSums"                ".rowSums"               
##  [3] ".tryResumeInterrupt"     "colSums"                
##  [5] "contr.sum"               "cumsum"                 
##  [7] "format.summaryDefault"   "marginSums"             
##  [9] "print.summary.table"     "print.summary.warnings" 
## [11] "print.summaryDefault"    "rowsum"                 
## [13] "rowsum.data.frame"       "rowsum.default"         
## [15] "rowSums"                 "sum"                    
## [17] "summary"                 "Summary"                
## [19] "summary.aov"             "summary.connection"     
## [21] "summary.data.frame"      "Summary.data.frame"     
## [23] "summary.Date"            "Summary.Date"           
## [25] "summary.default"         "Summary.difftime"       
## [27] "summary.factor"          "Summary.factor"         
## [29] "summary.glm"             "summary.lm"             
## [31] "summary.manova"          "summary.matrix"         
## [33] "Summary.numeric_version" "Summary.ordered"        
## [35] "summary.POSIXct"         "Summary.POSIXct"        
## [37] "summary.POSIXlt"         "Summary.POSIXlt"        
## [39] "summary.proc_time"       "summary.srcfile"        
## [41] "summary.srcref"          "summary.stepfun"        
## [43] "summary.table"           "summary.warnings"       
## [45] "summaryRprof"

Y aparecerán algunas funciones que podrán ser de utilidad

Fuera de RStudio

Podemos encontrar ayuda en diversas páginas de internet, como la página de R-Project: https://www.r-project.org/help.html, donde encontrarás más información de cómo buscar ayuda en internet e incluso algumos manuales en la siguiente página web: https://cran.r-project.org/manuals.html

También hay una gran comunidad de personas usuarias de R que podrán ayudarte o podrás encontrar la solución a una duda o problema que al igual que ti, a otra persona se le había presentado con anterioridad.

https://stackoverflow.com/questions/tagged/r

Vectores

Un vector es una colección de uno o más datos del mismo tipo.

vector_uno <- 8
vector_uno
## [1] 8

Como podemos ver, el número 16 es un vector, y lo podemos verificar de la siguiente manera:

is.vector(vector_uno)
## [1] TRUE

Podemos hacer un vector donde concatenamos otros vectores:

vector_dos <- c(vector_uno, 16, 32) #tenemos que usar $c$, c es para concatenar (unir/juntar dos vectores)
vector_dos
## [1]  8 16 32

Y también podemos ver la logintud del vector:

length(vector_dos) 
## [1] 3

Matrices

Hagamos una matriz de dimensión 3x2, es decir, de 3 renglones y 2 columnas

matriz_datos <- c(1,2,3,4,5,6)
matriz_uno <- matrix(matriz_datos, ncol=2, byrow = TRUE) #Con ncol ponemos el número de columnas deseadas, con byrow indicamos si queremos que los datos estén acomodados por filas, en este caso elegimos que sí.
matriz_uno
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6

Verificamos su dimensión:

dim(matriz_uno) # Utilizamos dim
## [1] 3 2

Como podemos ver, el primer número nos indica el número de renglones o filas y el segundo número nos indica el número de columnas.

De es manera, también podemos hacer una matriz de 2x3 de la siguiente manera:

matriz_dos <- matrix(matriz_datos, ncol=3, byrow =TRUE)
matriz_dos
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6

También podemos obtener su dimensión:

dim(matriz_dos)
## [1] 2 3

Como vemos, en esta última matriz los datos se acomodaron por fila, pero podemos cambiar a que esténa acomodados por columna, de la siguiente manera:

matriz_tres <- matrix(matriz_datos, ncol=3, byrow =FALSE)
matriz_tres
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

Manejo de matrices

Ahora aprenderemos cómo seleccionar algunos elementos de las matrices. Trabajaremos con la siguiente matriz:

matriz_ejemplo <- c(2,3,4,4,3,2,0,1,0)
matriz_cuatro <- matrix(matriz_ejemplo, ncol=3, byrow = TRUE)
matriz_cuatro 
##      [,1] [,2] [,3]
## [1,]    2    3    4
## [2,]    4    3    2
## [3,]    0    1    0

Para que nos muestre solamente algunos datos, podemos usar los corchetes, de la siguiente manera: \([Renglones/Filas, Columnas]\)

matriz_cuatro[1:2,] #Si queremos que nos muestre las dos primeras filas
##      [,1] [,2] [,3]
## [1,]    2    3    4
## [2,]    4    3    2
matriz_cuatro[-2,] #También podemos decir que no nos muestre cierta fila, en este caso la segunda, solamente tenemos que poner el signo negativo
##      [,1] [,2] [,3]
## [1,]    2    3    4
## [2,]    0    1    0

Asimismo, podemos indicar que no nos muestre cierta fila y cierta columna, por ejemplo:

matriz_cuatro[-2,-2]
##      [,1] [,2]
## [1,]    2    4
## [2,]    0    0

Regresando a nuestra matriz de ejemplo

matriz_cuatro
##      [,1] [,2] [,3]
## [1,]    2    3    4
## [2,]    4    3    2
## [3,]    0    1    0

Podemos hacer su transpuesta de la siguiente manera:

t(matriz_cuatro) # Ahora la matriz está acomodada por columnas
##      [,1] [,2] [,3]
## [1,]    2    4    0
## [2,]    3    3    1
## [3,]    4    2    0

De manera sencilla podemos obtener la inversa de una matriz:

inversa_matriz_cuatro <-solve(matriz_cuatro)
inversa_matriz_cuatro 
##            [,1]       [,2] [,3]
## [1,] -0.1666667  0.3333333 -0.5
## [2,]  0.0000000  0.0000000  1.0
## [3,]  0.3333333 -0.1666667 -0.5

De esta manera, podemos comprobar que una matriz multiplicada por su inversa nos da la matriz identidad:

matriz_cuatro%*%inversa_matriz_cuatro # Notar que cuando usamos matrices, debemos de poner %*%
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1

Algunas funciones utiles

Hasta ahora hemos realizado algunas operaciones algebraicas, manejo de vectores y matrices. Resulta útil conocer algunos comandos para trabajar más eficientemente:

Control + l

Al poner \(Control + l\) en la consola, ésta se limpiará, es decir, no mostrará ya ningún resultado.

# Control + l

ls()

Al poner \(ls()\) nos mostrará un vector donde se enlista los nombres de los objetos que se encuentran en nuestro ambiente/environment.

ls() 
##  [1] "inversa_matriz_cuatro" "matriz_cuatro"         "matriz_datos"         
##  [4] "matriz_dos"            "matriz_ejemplo"        "matriz_tres"          
##  [7] "matriz_uno"            "secuencia"             "vector_dos"           
## [10] "vector_uno"            "xy"                    "z"

rm()

Asimismo \(rm()\) nos servirá para quitar objetos en nuestro ambiente/environment

rm() 

Podemos eliminar nuestras variables con:

# rm(list=ls()) #Se borran las variables. Para ello, tienes que quitar el primer # Yo no lo puse porque no quiero que se borren mis variables :)

Iris

¿Qué es Iris?

Es un famoso conjunto de datos que proporciona las medidas en centímetros de las variables longitud y ancho del sépalo y longitud y ancho de pétalos, respectivamente, para 50 flores de cada una de las 3 especies de iris. Las especies son Iris setosa, versicolor y virginica. En Rstudio se encuentra precargada y podemos hacer uso de ellas para seguir explorando R.

A continuación, se muestra algunos elementos que se pueden aplicar, pero se recomienda seguir explorando por cuenta propia.

data(iris)
data(iris3)

¿Qué tipos de datos son?

is.matrix(iris)
## [1] FALSE

No es una matriz

is.data.frame(iris) #Es un data.frame
## [1] TRUE

Pero… sí es un data frame

is.list(iris)
## [1] TRUE

Y también una lista.

¿Qué dimensión tienen?

dim(iris)
## [1] 150   5
dim(iris3)
## [1] 50  4  3

Podemos sacar el promedio de los datos, la mediana, la moda, y también algunas medidas de dispersión, como se muestra a continuación:

mean(iris[1:50,1]) #Sepal L de Setosa
## [1] 5.006

Apply

Devuelve un vector o matriz o lista de valores obtenidos al aplicar una función a los márgenes de una arreglo o una matriz.

Lo utilizaremos con iris, como se muestra a continuación:

apply(iris[1:50,-5],2,mean) #Promedios de Setosa
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##        5.006        3.428        1.462        0.246
apply(iris[51:100,-5],2,mean) #Promedios de Versicolor
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##        5.936        2.770        4.260        1.326
apply(iris[101:150,-5],2,mean) #Promedios de Virginical
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##        6.588        2.974        5.552        2.026

Utilizando la base iris3, ¿cómo obtener la desviación estándar de cada flor?

sd_setosa<-apply(iris3[,,], 2, sd)# Todos las desviaciones estandar de Setosa
sd_setosa
##  Sepal L.  Sepal W.  Petal L.  Petal W. 
## 0.8280661 0.4358663 1.7652982 0.7622377
sd_versi<-apply(iris3[,,], 2, sd) # Todos las desviaciones estandar de Versicolor
sd_versi
##  Sepal L.  Sepal W.  Petal L.  Petal W. 
## 0.8280661 0.4358663 1.7652982 0.7622377
sd_virgi<-apply(iris3[,,], 2, sd)  # Todos las desviaciones estandar de Virginica
sd_virgi
##  Sepal L.  Sepal W.  Petal L.  Petal W. 
## 0.8280661 0.4358663 1.7652982 0.7622377

Con esta información, podeos construit un data frame muy básico, pero ilustrativo:

des_st_flores <- data.frame(Setosa=sd_setosa,
                            Versicolor=sd_versi,
                            Virginical=sd_virgi)
des_st_flores
##             Setosa Versicolor Virginical
## Sepal L. 0.8280661  0.8280661  0.8280661
## Sepal W. 0.4358663  0.4358663  0.4358663
## Petal L. 1.7652982  1.7652982  1.7652982
## Petal W. 0.7622377  0.7622377  0.7622377

Aggregate

¿Qué hace \(aggregate\)? Divide los datos en subconjuntos, calcula estadísticas resumidas para cada uno y devuelve el resultado en una forma conveniente, como se muestra a continuación:

aggregate(Sepal.Length ~ Species,data=iris,mean)
##      Species Sepal.Length
## 1     setosa        5.006
## 2 versicolor        5.936
## 3  virginica        6.588

Fechas y horas

# strptime(paste0(unlist(strsplit(BASE$datetime[1], "T"))[1], sep = " ", unlist(strsplit(bosque$datetime[1], "T"))[2]), format = "%Y-%m-%d %H:%M")

# fecha_hora <- strptime(fecha_hora, format = "%Y-%m-%d %H:%M")

Funciones

En Rstudio podemos realizar funciones, que nos ayudarán a hacer el trabajo más eficiente si es que hacemos recurrentemente ciertas operaciones, pot ejemplo, para calcular el área de un cuadrado:

area_cuad<-function(lado)
{
  area<-lado**2
  print(paste("el area es", area ,sep=" "))
}

Así, con la función podemos darle un valor a un lado de cuadrado, y nos dirá su área:

area_cuad(4)
## [1] "el area es 16"

Podemos también hacer funciones un poco más complejas, como la siguiente, que resuelve un sistema de ecuaciones cuadráticas:

sol_cuad_act<-function(a,b,c)
{
  if((b**2)-4*a*c>0)
  {
    x1<- (-b+sqrt((b**2) -4*a*c))/(2*a)
    x2<- (-b-sqrt((b**2) -4*a*c))/(2*a)
    print(paste("Maestro METPOL la primer solucion es:",x1,sep = " "))
    print(paste("Maestro METPOL la segunda solucion es:",x2,sep = " "))
  }
  else
  {
    if((b**2)-4*a*c==0)
    {
      x<- -b/(2*a)
      print(paste("La solucion es:",x,sep = " "))
    }
    else
    {
      print("La ecuación cuadratica no tiene solucion")
    }
  }
}

Y la probamos:

sol_cuad_act(2,1,2)
## [1] "La ecuación cuadratica no tiene solucion"