1 Tipos de datos en R

1.1 Numericos

El tipo de dato numérico en R esta compuesto por tipos de datos double (reales) y enteros (numeric) . Puedes comprobar si un objeto es numérico con la función mode o si la función is.numeric devuelve TRUE.

¿Que es un dato double?

datos double en R es la representación de un objeto numérico de doble precisión. Ten en cuenta que, de forma predeterminada, todos los números son dobles en R y que “Inf, -Inf, NaN”, la notación científica y la notación hexadecimal de números también son doubles

mode(55) # "numeric"
is.numeric(3) # TRUE)

podemos usar otras funciones para identificar la variable como numérica, ejemplo función class

numero <- 34.80
class(numero) #numeric
## [1] "numeric"

1.2 Enteros

El tipo de dato entero se puede crear agregando una L a un número. Este tipo de datos es útil si quieres pasar algún objeto de R a una función de C o FORTRAN que espera un valor entero, por lo que este tipo de datos generalmente no es necesario. Puedes verificar el tipo de datos con la función is.integer.

y <- 2L
typeof(y) # "integer"
## [1] "integer"
is.integer(3) # FALSE
## [1] FALSE
is.integer(3L) # TRUE
## [1] TRUE

1.3 Caracteres (texto)

Los caracteres o las cadenas de caracteres son símbolos, letras, palabras o frases dentro de comillas dobles o simples. Puedes verificar que algún objeto es de tipo carácter con la función is.character.

character <- "a"
typeof(character) # "character"
## [1] "character"
is.character(character) # TRUE
## [1] TRUE

1.4 logicas

El tipo logical es la forma que tiene R para los datos binarios. Usados en test lógicos son conocidos como datos booleano o lógico está compuesto por los valores TRUE, FALSE y NA. Nótese que puedes usar T y F en lugar de TRUE o FALSE. Sin embargo, esto no se recomienda porque podrías sobrescribir el valor de T o F pero no el de TRUE o FALSE, como se muestra en el siguiente bloque de código.

F # FALSE
## [1] FALSE
a <- T

# Puedes nombrar una variable como T o F
F <- a
F # TRUE
## [1] TRUE
# No puedes nombrar una variable como TRUE o FALSE
a <- TRUE

otro ejemplo

a <- 2
b <- 4
a == b  # ¿es igual a b?
## [1] FALSE
## [1] FALSE

1.5 Factores

Una variable factor es una variable categórica. Los vectores de caracteres a menudo se almacenan como factores para explotar funciones para tratar datos categóricos. Por ejemplo, en análisis de regresión.

vector_mes_malo <- factor(c("enero", "febrero", "marzo", "abril", "enero"))
class(vector_mes_malo)
## [1] "factor"

1.6 Complejo

El tipo de dato complejo es un objeto que incluye un numero imaginario (i), el tipo de dato imaginario tiene una parte real y una parte imaginaria (parte que incluye la (i)). Como los números imaginarios generalmente no se usan en estadística, este tipo de datos no es muy común. La función para verificar el tipo de datos es is.complex.

1 + 3i 
## [1] 1+3i
typeof(1 + 3i) # "complex"
## [1] "complex"
is.complex(1 + 3i)
## [1] TRUE

1.7 Date

Almacena sus valores internamente como el número de días transcurridos desde el 1 de enero de 1970; para las fechas anteriores el número de días se cuenta en sentido negativo.

R dispone en su paquete base de dos clases específicamente diseñadas para tratar con datos de tipo fecha/hora: Date (solo para fechas) y POSIXt (además de la fecha incluye hora y huso horario); esta última clase contiene dos subclases, POSIXct y POSIXlt que se diferencian simplemente en la forma en que almacenan internamente la fecha y la hora

ejemplo, Si introducimos la fecha en otro formato (por ejemplo “dia/mes/año”), hemos de indicarlo al usar as.Date para que R pueda interpretar la fecha correctamente

navidad=as.Date("25/12/2013",format="%d/%m/%Y")   #[1] "2013-12-25"
navidad                                          
## [1] "2013-12-25"

2 ¿como se organizan los tipos de datos?

2.1 VECTORES

Los vectores se caracterizan por tener una dirección y una magnitud, las componentes de un vector se guardan en coordenadas. Así como una variable puede almacenar un objeto, un vector puede almacenar varios objetos en un orden determinado. Los vectores pueden representar la columna de una tabla de datos, no pueden confundirse entre números con caracteres, deben ser construidos con el mismo tipo de dato.

Los vectores se crean con la función c (la c es de combinar) y pueden ser de tipo numérico (1234), carácter (abcd) o lógico (true or false).

En este ejercicio vamos a: 1. Crear vectores en un script 2. Realizar opraciones aritméticas con vectores 3. Seleccionar elementos en un vector

práctica 1: creando vectores en R

crear vector carácter con nombre de parametros fisicos

temperatura <- c("bogota", "pereira", "medellin","cartagena")

crear vector numérico con valores de los parametros del vector nombre

temperatura_valor <- c(13, 25, 30, 33)

crear vector lógico sobre los datos, si estan por encima (VERDADERO) o debajo (FALSO) del promedio de las ciudades del vector temperatura (14, 26, 27, 31).

comparacion<- c(FALSE, FALSE, TRUE, TRUE)

práctica 2: operaciones aritméticas con vectores

sumar 2 al vector temperatura

temperatura_valor+2
## [1] 15 27 32 35

dividir al vector temperatura

temperatura_valor/2
## [1]  6.5 12.5 15.0 16.5

crear un vector con otros valores

temperatura_valor2 <- c(25, 30, 27, 33)

calcular diferencia entre los vectores de temperatura

temperatura_valor - temperatura_valor2
## [1] -12  -5   3   0

calcular la longitud del vector de temperatura

length(temperatura)
## [1] 4

calcular el promedio del vector de temperatura_valor

mean(temperatura_valor)
## [1] 25.25

práctica 3: selección de elementos de un vector

2.1.a selección basada en posición

seleccionar la tercera posición del vector temperatura para saber a que ciudad pertenece

temperatura[3]
## [1] "medellin"

seleccionar la primera y la última ciudad

temperatura[c(1,4)]
## [1] "bogota"    "cartagena"

2.1.b selección basada en condición lógica

crear condición lógica

temperatura_valorbajo <- temperatura_valor < 29

mostrar condición para ver TRUE/FALSE

temperatura_valorbajo
## [1]  TRUE  TRUE FALSE FALSE

mostrar temperaturas bajas

temperatura_valor[temperatura_valorbajo]
## [1] 13 25

mostrar nombres de películas con puntuaciones bajas

temperatura[temperatura_valorbajo]
## [1] "bogota"  "pereira"

2.2 MATRICES

Una matriz de dos columnas y un grafico de dispersión son practicamente lo mismo. ya que son de coordenadas x,y una matriz es una forma de acomodar los datos que tienen filas y columnas las matrices pueden almacenar tipos de archivo numeros, caracter o logicos, pero no combinados se pueden construir combinando varios vectores.

crear matrices relacionar operaciones aritmeticas Seleccionar elementos de una matriz

para matrices se tiene en cuenta c como el numero, nrow filas ncol columnas y byrow organiza por filas, T es de verdad y sin T se toma como predeterminado el falso.

A<- matrix(c(1:9),nrow = 3,ncol = 3)
B<- matrix(c(10:18),nrow = 3,ncol = 3,byrow = T)

datos<- c(1,5,7,4,5,6,8,4,6) #vector datos numerico

C<- matrix(c(1,5,7,4,5,6,8,4,6),nrow = 3,ncol = 3,byrow = T)
D<- matrix(c(1,5,7),nrow = 3,ncol = 1)

2.2.a para la operacion de matrices deben de tener las mismas dimensiones. i.e.

suma

A+B
##      [,1] [,2] [,3]
## [1,]   11   15   19
## [2,]   15   19   23
## [3,]   19   23   27

Resta

A-B
##      [,1] [,2] [,3]
## [1,]   -9   -7   -5
## [2,]  -11   -9   -7
## [3,]  -13  -11   -9

Multiplicación por constante

A*3
##      [,1] [,2] [,3]
## [1,]    3   12   21
## [2,]    6   15   24
## [3,]    9   18   27

Multiplicación de matrices

A*B
##      [,1] [,2] [,3]
## [1,]   10   44   84
## [2,]   26   70  120
## [3,]   48  102  162

si se quiere una multiplicación matricial debe tener % si no multiplica termino a termino.

A%*%B
##      [,1] [,2] [,3]
## [1,]  174  186  198
## [2,]  213  228  243
## [3,]  252  270  288

Diagonal

diag(A)
## [1] 1 5 9

Inversa

la inversa se puede sacar siempre y cuando la determinante sea diferente de 0

solve(C)
##            [,1]        [,2]       [,3]
## [1,] -0.1428571  0.04761905  0.1190476
## [2,] -0.5714286  1.19047619 -0.5238095
## [3,]  0.5714286 -0.85714286  0.3571429

Traspuesta

t(A)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9

solucion de sistema de matrices

solve(C,D)
##            [,1]
## [1,]  0.9285714
## [2,]  1.7142857
## [3,] -1.2142857

2.3 DATAFRAME (la diferencia entre matrices y dataframe es que las matrices solo se refieren a valores numericos)

en un dataframe se pueden poner caracteres tipo logico, numericos, enteros, entre otros los dataframe guardan diferentes tipos de datos en columnas

Inicialmente, se deben crear los vectores con la información que se desea guardar

Temperatura <- c(25, 27, 29, 25, 27, 33, 31, 27, 26, 30, 32, 33)
Temperatura
##  [1] 25 27 29 25 27 33 31 27 26 30 32 33
Precipitacion <- c(55, 47, 50, 56, 54, 25, 27, 50, 50, 27, 26, 25)
Precipitacion
##  [1] 55 47 50 56 54 25 27 50 50 27 26 25
fecha<- c("1978-01-01","1979-02-12","1980-02-15", "1981-01-29","1982-01-25", "1983-01-02",
          "1984-02-07", "1985-04-07","1986-01-25","1987-03-06","1988-03-25","1989-02-07")

Posteriormente, se guardan los datos dentro de una variable, que para este caso se llamó tabla, y mediante el comando view, se observan los valores categorizados

tabla <- data.frame(fecha,Temperatura,Precipitacion)
tabla
View(tabla)

Posteriormente, es posible determinar la observación de un grupo de datos dentro de la tabla generada, de los 12 datos que contienen los vectores, (fecha, temperatura y precipitación), es posible seleccionar los datos, por ejemplo, desde el 3 al 7. como se muestra a continuación.

subtabla = tabla[3:7,]
subtabla
View(subtabla)

Asimismo, si se quiere identificar las fechas en que la temperatura fue la misma, mayor o menor, se puede realizar un filtro del mismo. (Por ejemplo, generar una tabla con las temperaturas cuyas fechas fue 27C)

tabla3=tabla[tabla$Temperatura==27,]
tabla3
View(tabla3)

2.4 LISTAS

las listas guardan diferentes objetos en una misma estructura de datos en R permiten agrupar o contener dataframes, matrices y vectores

Objetivo: estudiar qué son las listas en R
En este ejercicio vamos a:
  1. Crear listas en R
  2. Seleccionar elementos de una lista
  3. Identificar listas en R

Cargando datos de videos anteriores

informacion parámetros fisicos.

Temperatura <- c(25, 27, 29, 25, 27, 33, 31, 27, 26, 30, 32, 33)
Temperatura
##  [1] 25 27 29 25 27 33 31 27 26 30 32 33
Precipitacion <- c(55, 47, 50, 56, 54, 25, 27, 50, 50, 27, 26, 25)
Precipitacion
##  [1] 55 47 50 56 54 25 27 50 50 27 26 25
fecha<- c("1978-01-01","1979-02-12","1980-02-15", "1981-01-29","1982-01-25", "1983-01-02",
          "1984-02-07", "1985-04-07","1986-01-25","1987-03-06","1988-03-25","1989-02-07")

informacion de afluentes del rio magdalena con un caudal medio (m3/s) y el rendimiento promedio (l/s/km2) para el año 2001.

rio <- c("Magdalena", "Suaza", "Paez", "Neiva", "Yaguara", "Saldana", "Bogota", "Sumapaz", "Totare")
caudalmedio <- c(7000, 44, 181, 16, 14, 310, 39, 43, 7)
rendimientoprom <- c(26.42, 27.76, 115.65, 13.34, 9.27, 33.55, 6.51, 13.69, 4.59)

crear diferentes estructuras de datos en R,

matriz_afluentes <- matrix(c(rio, caudalmedio, rendimientoprom),
                           nrow = 9,
                           ncol = 3)
vector_fecha <- fecha

práctica 1: crear una lista en R

crear lista en R

lista_ejemp <- list(vector_fecha,
                    matriz_afluentes) 

mostrar lista

lista_ejemp
## [[1]]
##  [1] "1978-01-01" "1979-02-12" "1980-02-15" "1981-01-29" "1982-01-25"
##  [6] "1983-01-02" "1984-02-07" "1985-04-07" "1986-01-25" "1987-03-06"
## [11] "1988-03-25" "1989-02-07"
## 
## [[2]]
##       [,1]        [,2]   [,3]    
##  [1,] "Magdalena" "7000" "26.42" 
##  [2,] "Suaza"     "44"   "27.76" 
##  [3,] "Paez"      "181"  "115.65"
##  [4,] "Neiva"     "16"   "13.34" 
##  [5,] "Yaguara"   "14"   "9.27"  
##  [6,] "Saldana"   "310"  "33.55" 
##  [7,] "Bogota"    "39"   "6.51"  
##  [8,] "Sumapaz"   "43"   "13.69" 
##  [9,] "Totare"    "7"    "4.59"

cambiar nombre de dataframe

names(lista_ejemp) <- c('vector','matriz')

mostrar lista (sí, otra vez)

lista_ejemp
## $vector
##  [1] "1978-01-01" "1979-02-12" "1980-02-15" "1981-01-29" "1982-01-25"
##  [6] "1983-01-02" "1984-02-07" "1985-04-07" "1986-01-25" "1987-03-06"
## [11] "1988-03-25" "1989-02-07"
## 
## $matriz
##       [,1]        [,2]   [,3]    
##  [1,] "Magdalena" "7000" "26.42" 
##  [2,] "Suaza"     "44"   "27.76" 
##  [3,] "Paez"      "181"  "115.65"
##  [4,] "Neiva"     "16"   "13.34" 
##  [5,] "Yaguara"   "14"   "9.27"  
##  [6,] "Saldana"   "310"  "33.55" 
##  [7,] "Bogota"    "39"   "6.51"  
##  [8,] "Sumapaz"   "43"   "13.69" 
##  [9,] "Totare"    "7"    "4.59"

práctica 2: Seleccionar elementos de una lista

en general para seleccionar elementos se utiliza un par de corchetes con las listas es un poco diferente ya que se utilizan dobles corchetes, esto puede ser util para diferenciar un dataframe con una matriz una vez se tiene seleccionado el elemento de la lista se utilizan las formas de seleccion que se han visto para otros objetos

Seleccionar vector de la lista

lista_ejemp[['vector']]
##  [1] "1978-01-01" "1979-02-12" "1980-02-15" "1981-01-29" "1982-01-25"
##  [6] "1983-01-02" "1984-02-07" "1985-04-07" "1986-01-25" "1987-03-06"
## [11] "1988-03-25" "1989-02-07"

Seleccionar el tercer elemento del vector de la lista

lista_ejemp[['vector']][3]
## [1] "1980-02-15"

Seleccionar fila 5 y columna 3 de la matriz de la lista

lista_ejemp[['matriz']][5,3]
## [1] "9.27"

práctica 3: agregar/eliminar elementos a una lista

agregar dataframe a lista

lista_ejemp[['data_frame']] <- vector_fecha

revisar que está el dataframe

lista_ejemp
## $vector
##  [1] "1978-01-01" "1979-02-12" "1980-02-15" "1981-01-29" "1982-01-25"
##  [6] "1983-01-02" "1984-02-07" "1985-04-07" "1986-01-25" "1987-03-06"
## [11] "1988-03-25" "1989-02-07"
## 
## $matriz
##       [,1]        [,2]   [,3]    
##  [1,] "Magdalena" "7000" "26.42" 
##  [2,] "Suaza"     "44"   "27.76" 
##  [3,] "Paez"      "181"  "115.65"
##  [4,] "Neiva"     "16"   "13.34" 
##  [5,] "Yaguara"   "14"   "9.27"  
##  [6,] "Saldana"   "310"  "33.55" 
##  [7,] "Bogota"    "39"   "6.51"  
##  [8,] "Sumapaz"   "43"   "13.69" 
##  [9,] "Totare"    "7"    "4.59"  
## 
## $data_frame
##  [1] "1978-01-01" "1979-02-12" "1980-02-15" "1981-01-29" "1982-01-25"
##  [6] "1983-01-02" "1984-02-07" "1985-04-07" "1986-01-25" "1987-03-06"
## [11] "1988-03-25" "1989-02-07"

eliminar un elemento de lista (en este caso la matriz)

lista_ejemp[['matriz']] <- NULL

revisar que no está la matriz

lista_ejemp
## $vector
##  [1] "1978-01-01" "1979-02-12" "1980-02-15" "1981-01-29" "1982-01-25"
##  [6] "1983-01-02" "1984-02-07" "1985-04-07" "1986-01-25" "1987-03-06"
## [11] "1988-03-25" "1989-02-07"
## 
## $data_frame
##  [1] "1978-01-01" "1979-02-12" "1980-02-15" "1981-01-29" "1982-01-25"
##  [6] "1983-01-02" "1984-02-07" "1985-04-07" "1986-01-25" "1987-03-06"
## [11] "1988-03-25" "1989-02-07"