Intro a datos y estructuras en R

Una breve intro a estructuras en R.

Base R
Author
Affiliation
Published

February 1, 2018

# ---
# title: "Intro a datos y estructuras en R"
# description: |
#   Una breve intro a estructuras en R.
# author:
#   - name: Ronny A. Hernández Mora
#     url: http://ronnyhdez.rbind.io/
# date: 2018-02-01
# creative_commons: CC BY-NC
# preview: images/structure.png
# twitter:
#   creator: "@RonnyHdezM"
# output:
#   distill::distill_article:
#     self_contained: true
# ---

Datos y Estructuras

Este pequeño e introductorio tutorial consiste en explicar cómo R en su entorno “entiende” los datos (objetos), es decir sus clases y además cómo los almacena en ese entorno. Entender este tipo de cosas básicas en R nos podrán ahorrar dolores de cabeza en futuros análisis de datos que hagamos.

Primer paso:

Primero tenemos que entender que R lee los datos que le damos de distintas maneras para poder manejarlos y hacer tareas que le pidamos. Entre estos tenemos:

  • character: corresponden a texto
  • numeric: corresponden a números
  • integer: son números enteros (sin decimales)
  • logical: son condicionales y están en forma de verdadero o falso
  • complex: corresponden a números complejos

Para crear vectores c( )

a <- c("biologia", "A", "estadistica")
class(a)
[1] "character"
b <- c(18.6, 90)
class(b)
[1] "numeric"
c <- c(18L, 26L)
class(c)
[1] "integer"
d <- 2 + 4i
class(d)
[1] "complex"
e <- c(TRUE, FALSE)
class(e)
[1] "logical"

¿Para qué sirven los tipos de datos?

Hay ciertas cosas que se deben de tomar en cuenta a la hora de trabajar con datos en R, y es que estos son guardados en estructuras. Es decir, R “acomoda” esos datos en formas que los puede manejar.

Estos son algunos ejemplos rápidos:

Vectores elementos son del mismo tipo

v_1 <- c(10,20,30)
v_2 <- c("a","b","c")
v_3 <- c(TRUE,FALSE,TRUE)

Listas elementos son de diferente tipo

l_1 <- list(v_1,v_2,v_3)

l_1
[[1]]
[1] 10 20 30

[[2]]
[1] "a" "b" "c"

[[3]]
[1]  TRUE FALSE  TRUE

matrix es de dos dimensiones con elementos del mismo tipo:

matrix_1 <- matrix(1:9,nrow = 3, ncol = 3)
matrix_1
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

data frame es de dos dimensiones con elementos de diferente tipo:

# Primero creamos un par de vectores para unirlos en un dataframe
numero <- 1:5
nombre <- c("Mercurio","Venus","Tierra","Marte","Jupiter")
planeta <- data.frame(numero,nombre)
planeta
  numero   nombre
1      1 Mercurio
2      2    Venus
3      3   Tierra
4      4    Marte
5      5  Jupiter

Array es una estructura de tres o más dimensiones:

D <- 1:12
dim(D) <- c(2,3,2)        # Dos filas, tres columnas y dos "caras"
D
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

Maneras de coercionar las clases

Hay ocasiones en las cuales R podría confundir lo que nosotros consideramos un dato de cierto tipo, por ejemplo un número lo podría leer como un carácter. A la hora de hacer algunos cálculos habrán problemas.

Pero existe una solución y esto es coercionar los tipos de los datos. Esto se puede hacer tal como se muestra en los siguientes ejemplos:

biolo_vector <- c(20, 40, "A", 80)
class(biolo_vector)
[1] "character"
z <- as.numeric(biolo_vector)
Warning: NAs introduced by coercion
z
[1] 20 40 NA 80
biolo_vector <- c(20, 40, TRUE, 80)
class(biolo_vector)
[1] "numeric"
biolo_vector
[1] 20 40  1 80
biolo_vector <- c(20:60)
bv_1 <- as.character(biolo_vector)
bv_2 <- as.logical(biolo_vector)
bv_3 <- as.complex(biolo_vector)
class(bv_1)
[1] "character"
class(bv_2)
[1] "logical"
class(bv_3)
[1] "complex"

Exploración datos:

Cuando traemos datos a R hay una manera fácil de visualizar su estructura o forma sin tener que acudir al documento original. A continuación mostramos una serie de ejemplos en los cuales se m

dir()                              # ver que tengo en el wd
head(data)                         # Ver primeros 6 observaciones
tail(data)                         # últimas 6 observaciones
str(data)                          # estructura del data.frame
dim(data)                          # dimensiones (rows & columns)
names(data)                        # nombres columnas
glimpse(data)                      # paquete diplyr
summary(data)                      # resumen de cada variable

¿Qué siginifica dir() y ls()?

dir () me refiere a los archivos que se encuentran en el directorio de trabajo. ls () me refiere a los objetos que se encuentran en el espacio de trabajo

Comprensión de un data frame y su estructura

Para comprender mejor vamos a construir un data.frame de manera rápida y simple:

Creamos los vectores a unir:

primer_nombre <- c("Isaac","Charles","Rosalind","Marie") 

segundo_nombre <- c("Newton","Darwin","Franklin","Curie")

edad_muerte <- c(84, 73, 37, 66)

campo <- c("Física", "Biología", "Química", "Física")

fecha_muerte <- as.Date(c("1643-1-4", "1882-4-19",
                        "1958-4-16", "1934-7-4"))

Unimos cada uno de los vectores en un data.frame

cientificos <- data.frame(primer_nombre, segundo_nombre,
                          edad_muerte, campo, fecha_muerte)

Revisemos estructura igual que en caso anterior

head(cientificos)
  primer_nombre segundo_nombre edad_muerte    campo fecha_muerte
1         Isaac         Newton          84   Física   1643-01-04
2       Charles         Darwin          73 Biología   1882-04-19
3      Rosalind       Franklin          37  Química   1958-04-16
4         Marie          Curie          66   Física   1934-07-04
str(cientificos)
'data.frame':   4 obs. of  5 variables:
 $ primer_nombre : chr  "Isaac" "Charles" "Rosalind" "Marie"
 $ segundo_nombre: chr  "Newton" "Darwin" "Franklin" "Curie"
 $ edad_muerte   : num  84 73 37 66
 $ campo         : chr  "Física" "Biología" "Química" "Física"
 $ fecha_muerte  : Date, format: "1643-01-04" "1882-04-19" ...
#glimpse(cientificos) con librería dplyr

Reuse

Citation

BibTeX citation:
@online{a. hernandez mora2018,
  author = {A. Hernandez Mora, Ronny},
  title = {Intro a Datos y Estructuras En {R}},
  date = {2018-02-01},
  url = {https://profound-caramel-d8abb6.netlify.app/posts/2021-12-11-estructuras-r},
  langid = {en}
}
For attribution, please cite this work as:
A. Hernandez Mora, Ronny. 2018. “Intro a Datos y Estructuras En R.” February 1, 2018. https://profound-caramel-d8abb6.netlify.app/posts/2021-12-11-estructuras-r.