Capítulo 2 Funcionamiento básico de R
2.1 Introducción
En este capitulo se va a dar una introducción al funcionamiento básico de R (R Core Team, 2019), incluyendo el uso de R como una calculadora (consola), creación de objetos, y los tipos principales objetos que se utilizan en R, así como importar y exportar datos, y unas inspecciones generales de los datos.
Se van a usar, aunque poco en este capitulo, funciones de los paquetes:
library(rio)
library(skimr)
library(psych)
library(DescTools)
library(tidyverse)
library(summarytools)
2.2 Operaciones básicas
R puede funcionar como una calculadora básica, donde es posible realizar operaciones aritméticas sencillas. Los nombres de las funciones están en ingles (ej: sqrt para raíz cuadrada, round para redondeo, etc.).
Como cualquier otro programa, si se va a utilizar operaciones con ángulos (ej: cos, tan, etc.), los ángulos tienen que darse en radianes, y el resultado va a estar en radianes.
1+2
## [1] 3
1-2
## [1] -1
1*2
## [1] 2
1/2
## [1] 0.5
sqrt(125)
## [1] 11.18034
2.3 Crear objetos
Objetos se pueden crear usando los operadores <- o =. Al crear un objeto este no se despliega en la consola a menos que uno lo llame directamente o que a la hora de crearlo sea encerrado con paréntesis redondos ().
La idea de generar objetos es básica para los lenguajes de programación. Los objetos que se crean pueden ser reutilizados después de ser creados. Si se desean actualizar las operaciones o funciones que dependen de un objeto, solo se cambia el objeto una vez, y el resto se actualiza cuando se vuelve a correr.
Aquí se están generando los objetos x, y, y z, donde x se imprime hasta llamarlo, y se imprime al guardarlo por estar encerrado en paréntesis, y z es función de x y y.
x <- 1
(y = 2)
## [1] 2
x
## [1] 1
x + y
## [1] 3
z = x + y
2.4 Vectores
Los vectores son unidimensionales y deben ser (contener elementos) del mismo tipo. Aquí se muestran los diferentes tipos, y como crearlos. Los más importantes tipos son Numéricos, Texto, y Factores (tipo especial en R).
2.4.1 Numéricos
Se pueden crear vectores numéricos a partir de datos puntuales, sin ningún orden, usando la función c(), y separando las entradas (elementos) por medio de comas ,.
x <- c(1,2,3,4,5)
y <- c(6,7,8,9,10)
O se pueden crear vectores en secuencia (seq(from = , to = , by =, o length.out = )) o de valores repetidos (rep()). Crear vectores de valores repetidos no aplica únicamente para datos numéricos.
En seq se definen los argumentos from: valor inicial, to: valor final, y by: el intervalo, o length.out: la cantidad de elementos que quiero. En rep se define lo que se quiere repetir, y el numero de veces a repetir.
(f = 1:30)
## [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
(t1 = seq(from = 0, to = 20, by = .2))
## [1] 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8
## [16] 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8
## [31] 6.0 6.2 6.4 6.6 6.8 7.0 7.2 7.4 7.6 7.8 8.0 8.2 8.4 8.6 8.8
## [46] 9.0 9.2 9.4 9.6 9.8 10.0 10.2 10.4 10.6 10.8 11.0 11.2 11.4 11.6 11.8
## [61] 12.0 12.2 12.4 12.6 12.8 13.0 13.2 13.4 13.6 13.8 14.0 14.2 14.4 14.6 14.8
## [76] 15.0 15.2 15.4 15.6 15.8 16.0 16.2 16.4 16.6 16.8 17.0 17.2 17.4 17.6 17.8
## [91] 18.0 18.2 18.4 18.6 18.8 19.0 19.2 19.4 19.6 19.8 20.0
(t2 = seq(from = 0, to = 20, length.out = 11))
## [1] 0 2 4 6 8 10 12 14 16 18 20
(u = rep(5,20))
## [1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
rep(5:7,3)
## [1] 5 6 7 5 6 7 5 6 7
rep(5:7,each=3)
## [1] 5 5 5 6 6 6 7 7 7
2.4.2 Texto (string, character)
Los vectores de texto son usualmente el precursor de vectores categóricos o factores. Se construyen de manera similar usando c(), pero cada entrada (elemento) va en comillas (doble "", o sencilla ’’).
z <- "pura vida"
z
## [1] "pura vida"
dias <- c("lunes","martes","miercoles","jueves","viernes")
dias
## [1] "lunes" "martes" "miercoles" "jueves" "viernes"
2.4.3 Categóricos (factores)
Los vectores para datos categóricos en R son llamados factores, y estos factores van a contener niveles o clases (levels). Este tipo de vector es muy utilizado en diversos análisis.
El primer tipo es un factor nominal (sin orden en los niveles/clases). Aquí se esta usando el vector de texto creado anteriormente, y simplemente se convierte a factor. La función as_factor es del paquete forcats, que se carga al cargar el tidyverse. Existe una función básica as.factor; los comportamientos son un poco diferentes, siendo la principal diferencia que as_factor ordena los niveles de acuerdo al orden de aparición, mientras que as.factor ordena los niveles de manera alfabética.
dias.f1 = as_factor(dias)
dias.f1
## [1] lunes martes miercoles jueves viernes
## Levels: lunes martes miercoles jueves viernes
dias.f2 = as.factor(dias)
dias.f2
## [1] lunes martes miercoles jueves viernes
## Levels: jueves lunes martes miercoles viernes
Factores ordinales pueden crearse usando la función básica factor, primero con el vector de datos (usualmente texto), agregando el argumento ordered = TRUE. Ademas, hay que especificar los niveles en el orden deseado con el argumento levels, donde van a ir de menor a mayor.
ordenado = factor(c('Bajo','Alto','Alto','Medio','Medio','Bajo','Alto'),
ordered = T,
levels = c('Bajo','Medio','Alto'))
ordenado
## [1] Bajo Alto Alto Medio Medio Bajo Alto
## Levels: Bajo < Medio < Alto
2.5 Matrices
Las matrices son representaciones multidimensionales de datos numéricos. La función para construirlas es matrix, donde se especifican los datos y el numero de filas o columnas. Por defecto inserta los datos por columna, si se quieren meter por fila se debe usar byrow = TRUE. Adicionalmente se le pueden agregar nombres a las filas y columnas con el argumento dimnames.
matrix(data = 1:15, nrow = 3)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 4 7 10 13
## [2,] 2 5 8 11 14
## [3,] 3 6 9 12 15
matrix(data = 1:15, nrow = 3, byrow = T)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 6 7 8 9 10
## [3,] 11 12 13 14 15
matrix(data = 1:15, nrow = 3, byrow = T,
dimnames = list(Filas = letters[1:3],
Columnas = LETTERS[1:5]))
## Columnas
## Filas A B C D E
## a 1 2 3 4 5
## b 6 7 8 9 10
## c 11 12 13 14 15
2.6 DataFrames, listas y tibbles
Los vectores son unidimensionales y pueden almacenar datos (elementos) de un solo tipo. DataFrames, listas y tibbles son objetos que pueden almacenar más de 1 vector y los diferentes vectores pueden ser diferentes entre ellos. Esto es similar a una hoja de calculo donde cada columna es un vector.
Para DataFrames los contenidos pueden ser únicamente vectores de la misma longitud. Se crea usando la función data.frame, con los argumentos siendo los vectores, que van a pasar a ser las columnas. La función names brinda los nombres de las columnas, y a su vez se puede usar para renombrar a las columnas.
DF = data.frame(Visitas = x, Revision = y, Dias = dias)
DF
## # A tibble: 5 x 3
## Visitas Revision Dias
## <dbl> <dbl> <fct>
## 1 1 6 lunes
## 2 2 7 martes
## 3 3 8 miercoles
## 4 4 9 jueves
## 5 5 10 viernes
names(DF)
## [1] "Visitas" "Revision" "Dias"
names(DF) = c("Experimento", "Valores", "Tiempo")
DF
## # A tibble: 5 x 3
## Experimento Valores Tiempo
## <dbl> <dbl> <fct>
## 1 1 6 lunes
## 2 2 7 martes
## 3 3 8 miercoles
## 4 4 9 jueves
## 5 5 10 viernes
Para listas los contenidos pueden ser cualquier objeto y de cualquier dimensión. Muchos de los resultados de funciones en R son listas. Estas se crean con la función list.
lst = list(Exp = x, Val = y, Dias = dias, Data = DF)
lst
## $Exp
## [1] 1 2 3 4 5
##
## $Val
## [1] 6 7 8 9 10
##
## $Dias
## [1] "lunes" "martes" "miercoles" "jueves" "viernes"
##
## $Data
## Experimento Valores Tiempo
## 1 1 6 lunes
## 2 2 7 martes
## 3 3 8 miercoles
## 4 4 9 jueves
## 5 5 10 viernes
Tibbles son un tipo especial de DataFrame, donde la principal diferencia es que pueden tener un contenido (columna) que puede ser una lista y esto puede brindar muchas facilidades a la hora de manipular y analizar los datos. Ademas no fuerza a datos de texto a factores y en la consola se despliega de manera más amigable.
tb = tibble(Visitas = x, Revision = y,
Dias = dias, Extra = map(6:10, ~rnorm(.x)))
tb
## # A tibble: 5 x 4
## Visitas Revision Dias Extra
## <dbl> <dbl> <chr> <list>
## 1 1 6 lunes <dbl [6]>
## 2 2 7 martes <dbl [7]>
## 3 3 8 miercoles <dbl [8]>
## 4 4 9 jueves <dbl [9]>
## 5 5 10 viernes <dbl [10]>
2.7 Verificando objetos
Hay funciones para verificar el tipo de objeto (mode, is, class), comprobar si es de un tipo en especifico (is.*) y cambiar de un tipo a otro (as.*). Con la funcione methods(class = *) se pueden obtener los diferentes métodos o funciones disponibles para ese tipo de objeto (va a depender de los paquetes cargados).
mode(x)
## [1] "numeric"
is(x)
## [1] "numeric" "vector" "index" "replValue"
## [5] "numLike" "number" "atomicVector" "numericVector"
## [9] "EnumerationValue" "replValueSp" "Mnumeric"
class(x)
## [1] "numeric"
x <- c(1, 2, 3, 4, 5, 6)
methods(class = class(x))
## [1] [ [<- all.equal Arith as_factor
## [6] as_mapper as.data.frame as.Date as.POSIXct as.POSIXlt
## [11] as.raster as.yearmon as.yearqtr cbind2 coerce
## [16] coerce<- Compare Desc full_seq get_skimmers
## [21] Logic months Ops rbind2 recode
## [26] rescale scale_type
## see '?methods' for accessing help and source code
Aquí se agrega un elemento de texto a un vector numérico, R por defecto lo va a cambiar a texto, que se revisa con mode(x), y específicamente si es numérico con is.numeric(x). Para cambiarlo de nuevo a numérico se usa as.numeric(x).
x[6]<-"NA"
x
## [1] "1" "2" "3" "4" "5" "NA"
mode(x)
## [1] "character"
is.numeric(x)
## [1] FALSE
x2 <- as.numeric(x)
x2
## [1] 1 2 3 4 5 NA
2.8 Guardando el espacio de trabajo
Una vez se han generado objetos estos pueden ser guardados para compartir con otra gente o cargar en otra sesión para no tener que volver a generarlos.
save.image("introR.rdata")
load("introR.rdata")
2.9 Importando/cargando datos
La mejor opción para importar datos es usar import del paquete rio (Chan & Leeper, 2018). Uno simplemente ocupa darle la dirección del archivo que se quiere importar y la función inteligentemente escoge la forma para importarlo. Si se quiere importar un documento de Excel que contiene varias hojas, se usa import_list, donde el resultado es una lista con las diferentes hojas. El argumento setclass = 'tibble' se usa para definir que el objeto creado sea un tibble y no un DataFrame.
data("airquality")
head(airquality)
## # A tibble: 6 x 6
## Ozone Solar.R Wind Temp Month Day
## <int> <int> <dbl> <int> <int> <int>
## 1 41 190 7.4 67 5 1
## 2 36 118 8 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
# dat1 <- import(file.choose(), setclass = 'tibble')
dat1 <- import("data/LungCapData2.csv", setclass = 'tibble')
titanic <- import("data/titanic.csv", setclass = 'tibble')
lista_datos = import_list('data/datasets.xlsx', setclass = 'tibble')
2.10 Exportando datos
Usar export del paquete rio. Se pueden exportar diferentes formatos. Si se exporta una lista con nombres a un Excel, cada entrada de la lista aparece en una hoja diferente.
export(airquality, "data/airquality.csv")
export(list(airquality = airquality,
mpg = mpg,
gss = gss_cat), "data/datasets.xlsx")
2.11 Inspeccionando los datos
Aquí se muestran funciones básicas para explorar los datos y como acceder a ciertos datos en especifico. Dentro de las funciones más usadas están:
head: Muestra las primeras 6 filas o elementos de un DataFrame o vector (no es necesario usar esto con un Tibble ya que el Tibble muestra las primeras 10 filas por defecto)tail: Muestra las ultimas 6 filas o elementosdim: Muestra la dimensión del objetosummary: Dependiendo del objeto esta función muestra diferentes cosas, en general siendo un resumen de los contenidos del objetostr: Muestra la estructura de los datos, indicando numero de variables y observaciones, así como el tipo de variables (de nuevo esto lo muestra un Tibble por defecto)names: Muestra los nombres de los objetos; en el caso de DataFrames y tibbles los nombres de las columnas, en el caso de una lista los nombres de los objetos dentro de la lista
head(dat1)
## # A tibble: 6 x 5
## Age LungCap Height Gender Smoke
## <int> <dbl> <dbl> <chr> <chr>
## 1 9 3.12 57 female no
## 2 8 3.17 67.5 female no
## 3 7 3.16 54.5 female no
## 4 9 2.67 53 male no
## 5 9 3.68 57 male no
## 6 8 5.01 61 female no
tail(dat1)
## # A tibble: 6 x 5
## Age LungCap Height Gender Smoke
## <int> <dbl> <dbl> <chr> <chr>
## 1 16 12.6 72 male yes
## 2 16 10.8 67 male yes
## 3 15 9.18 68 male yes
## 4 18 6.56 60 female no
## 5 16 6.38 63 female yes
## 6 15 7.63 66.5 female no
dim(dat1)
## [1] 654 5
summary(dat1)
## Age LungCap Height Gender
## Min. : 3.000 Min. : 0.373 Min. :46.00 Length:654
## 1st Qu.: 8.000 1st Qu.: 3.943 1st Qu.:57.00 Class :character
## Median :10.000 Median : 5.643 Median :61.50 Mode :character
## Mean : 9.931 Mean : 5.910 Mean :61.14
## 3rd Qu.:12.000 3rd Qu.: 7.356 3rd Qu.:65.50
## Max. :19.000 Max. :15.379 Max. :74.00
## Smoke
## Length:654
## Class :character
## Mode :character
##
##
##
str(dat1)
## tibble [654 × 5] (S3: tbl_df/tbl/data.frame)
## $ Age : int [1:654] 9 8 7 9 9 8 6 6 8 9 ...
## $ LungCap: num [1:654] 3.12 3.17 3.16 2.67 3.69 ...
## $ Height : num [1:654] 57 67.5 54.5 53 57 61 58 56 58.5 60 ...
## $ Gender : chr [1:654] "female" "female" "female" "male" ...
## $ Smoke : chr [1:654] "no" "no" "no" "no" ...
names(dat1)
## [1] "Age" "LungCap" "Height" "Gender" "Smoke"
Para acceder a elementos de un vector (de cualquier tipo) se usan los corchetes cuadrados [], con el numero de la posición del elemento dentro de estos. La posición se puede especificar por medio de un valor único, un rango (inicio:fin), o por medio de un vector de posiciones usando c().
t1[3:5]
## [1] 0.4 0.6 0.8
dias[2]
## [1] "martes"
ordenado[c(2,5,7)]
## [1] Alto Medio Alto
## Levels: Bajo < Medio < Alto
Para acceder a elementos de una lista se usa el corchete sencillo para extraer el elemento como tal, o doble corchete para extraer los contenido del elemento.
lst[1]
## $Exp
## [1] 1 2 3 4 5
lst[[1]]
## [1] 1 2 3 4 5
lst[[1]][3]
## [1] 3
Para acceder a los datos de una matriz o tabla (DataFrame o tibble) se usan los corchetes cuadrados [,], donde el espacio antes de la coma se usa para seleccionar filas y el espacio después para seleccionar columnas (de acuerdo al numero, o al nombre para tablas).
En tablas, para acceder a una columna como vector se pueden usar los dobles corchetes [[]] o el operados $.
dat1[,1] # primer columna
## # A tibble: 654 x 1
## Age
## <int>
## 1 9
## 2 8
## 3 7
## 4 9
## 5 9
## 6 8
## 7 6
## 8 6
## 9 8
## 10 9
## # … with 644 more rows
dat1[1,] # primer fila
## # A tibble: 1 x 5
## Age LungCap Height Gender Smoke
## <int> <dbl> <dbl> <chr> <chr>
## 1 9 3.12 57 female no
dat1[1,1] # elemento en primer fila y columna
## # A tibble: 1 x 1
## Age
## <int>
## 1 9
dat1[,1:3] # columnas de la 1 a la 3
## # A tibble: 654 x 3
## Age LungCap Height
## <int> <dbl> <dbl>
## 1 9 3.12 57
## 2 8 3.17 67.5
## 3 7 3.16 54.5
## 4 9 2.67 53
## 5 9 3.68 57
## 6 8 5.01 61
## 7 6 3.76 58
## 8 6 2.24 56
## 9 8 3.96 58.5
## 10 9 3.83 60
## # … with 644 more rows
dat1[,c(1,3,5)] # columnas 1, 3, y 5
## # A tibble: 654 x 3
## Age Height Smoke
## <int> <dbl> <chr>
## 1 9 57 no
## 2 8 67.5 no
## 3 7 54.5 no
## 4 9 53 no
## 5 9 57 no
## 6 8 61 no
## 7 6 58 no
## 8 6 56 no
## 9 8 58.5 no
## 10 9 60 no
## # … with 644 more rows
dat1[,c("Age","Height")] # columnas por nombre
## # A tibble: 654 x 2
## Age Height
## <int> <dbl>
## 1 9 57
## 2 8 67.5
## 3 7 54.5
## 4 9 53
## 5 9 57
## 6 8 61
## 7 6 58
## 8 6 56
## 9 8 58.5
## 10 9 60
## # … with 644 more rows
head(dat1[["Age"]]) # columna como vector
## [1] 9 8 7 9 9 8
head(dat1$Age) # columna como vector
## [1] 9 8 7 9 9 8
dat1["Age"] # columna por nombre
## # A tibble: 654 x 1
## Age
## <int>
## 1 9
## 2 8
## 3 7
## 4 9
## 5 9
## 6 8
## 7 6
## 8 6
## 9 8
## 10 9
## # … with 644 more rows
Para columnas de tipo factor se pueden revisar los niveles con la función levels. Si una columna es de tipo texto y se quiere cambiar a factor se reescribe la columna (tabla$columna) por medio de la función factor. Ademas, si se requieren ordenar los niveles, estos se puede hacer especificando el orden deseado con el argumento levels, usando el nombre de los elementos en el vector.
levels(dat1$Smoke)
## NULL
dat1$Smoke = factor(dat1$Smoke,levels = c("yes","no")) # reordenar niveles
levels(dat1$Smoke)
## [1] "yes" "no"
summary(dat1)
## Age LungCap Height Gender Smoke
## Min. : 3.000 Min. : 0.373 Min. :46.00 Length:654 yes: 65
## 1st Qu.: 8.000 1st Qu.: 3.943 1st Qu.:57.00 Class :character no :589
## Median :10.000 Median : 5.643 Median :61.50 Mode :character
## Mean : 9.931 Mean : 5.910 Mean :61.14
## 3rd Qu.:12.000 3rd Qu.: 7.356 3rd Qu.:65.50
## Max. :19.000 Max. :15.379 Max. :74.00
2.12 Descripciones generales (globales)
Se muestran varias funciones que generan un resumen general de un vector, o tabla dependiendo del tipo de variable presente. Estas funciones se encuentran en los paquetes skimr (Waring et al., 2019), psych (Revelle, 2020), DescTools (Signorell, 2020), y summarytools (Comtois, 2019).
set.seed(101)
myvector = rnorm(n = 60,mean = 30,sd = 8)
skim(myvector)
| Name | myvector |
| Number of rows | 60 |
| Number of columns | 1 |
| _______________________ | |
| Column type frequency: | |
| numeric | 1 |
| ________________________ | |
| Group variables |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| data | 0 | 1 | 29.11 | 7.42 | 11.45 | 24.06 | 29.78 | 34.57 | 41.42 | ▂▅▇▇▆ |
describe(myvector)
## # A tibble: 1 x 13
## vars n mean sd median trimmed mad min max range skew kurtosis
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 60 29.1 7.42 29.8 29.5 7.87 11.4 41.4 30.0 -0.499 -0.671
## # … with 1 more variable: se <dbl>
Desc(myvector)
## ------------------------------------------------------------------------------
## myvector (numeric)
##
## length n NAs unique 0s mean meanCI
## 60 60 0 = n 0 29.10622 27.18840
## 100.0% 0.0% 0.0% 31.02404
##
## .05 .10 .25 median .75 .90 .95
## 16.47568 18.28631 24.06407 29.78292 34.56941 37.43271 39.38988
##
## range sd vcoef mad IQR skew kurt
## 29.97666 7.42400 0.25507 7.86821 10.50535 -0.49887 -0.67149
##
## lowest : 11.44538, 13.41515, 13.59754, 16.62716, 18.12898
## highest: 39.03847, 39.38978, 39.39173, 39.51883, 41.42204

dfSummary(myvector) %>% view(method = 'render')
Data Frame Summary
myvector
Dimensions: 60 x 1Duplicates: 0
| No | Variable | Stats / Values | Freqs (% of Valid) | Valid | Missing |
|---|---|---|---|---|---|
| 1 | myvector [numeric] | Mean (sd) : 29.1 (7.4) min < med < max: 11.4 < 29.8 < 41.4 IQR (CV) : 10.5 (0.3) | 60 distinct values | 60 (100%) | 0 (0%) |
Generated by summarytools 0.9.4 (R version 3.6.0)
2020-08-19
skim(airquality)
| Name | airquality |
| Number of rows | 153 |
| Number of columns | 6 |
| _______________________ | |
| Column type frequency: | |
| numeric | 6 |
| ________________________ | |
| Group variables |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| Ozone | 37 | 0.76 | 42.13 | 32.99 | 1.0 | 18.00 | 31.5 | 63.25 | 168.0 | ▇▃▂▁▁ |
| Solar.R | 7 | 0.95 | 185.93 | 90.06 | 7.0 | 115.75 | 205.0 | 258.75 | 334.0 | ▅▃▅▇▅ |
| Wind | 0 | 1.00 | 9.96 | 3.52 | 1.7 | 7.40 | 9.7 | 11.50 | 20.7 | ▂▇▇▃▁ |
| Temp | 0 | 1.00 | 77.88 | 9.47 | 56.0 | 72.00 | 79.0 | 85.00 | 97.0 | ▂▃▇▇▃ |
| Month | 0 | 1.00 | 6.99 | 1.42 | 5.0 | 6.00 | 7.0 | 8.00 | 9.0 | ▇▇▇▇▇ |
| Day | 0 | 1.00 | 15.80 | 8.86 | 1.0 | 8.00 | 16.0 | 23.00 | 31.0 | ▇▇▇▇▆ |
describe(airquality)
## # A tibble: 6 x 13
## vars n mean sd median trimmed mad min max range skew
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 116 42.1 33.0 31.5 37.8 25.9 1 168 167 1.21
## 2 2 146 186. 90.1 205 190. 98.6 7 334 327 -0.419
## 3 3 153 9.96 3.52 9.7 9.87 3.41 1.7 20.7 19 0.341
## 4 4 153 77.9 9.47 79 78.3 8.90 56 97 41 -0.371
## 5 5 153 6.99 1.42 7 6.99 1.48 5 9 4 -0.00234
## 6 6 153 15.8 8.86 16 15.8 11.9 1 31 30 0.00260
## # … with 2 more variables: kurtosis <dbl>, se <dbl>
Desc(airquality)
## ------------------------------------------------------------------------------
## Describe airquality (data.frame):
##
## data frame: 153 obs. of 6 variables
## 111 complete cases (72.5%)
##
## Nr ColName Class NAs Levels
## 1 Ozone integer 37 (24.2%)
## 2 Solar.R integer 7 (4.6%)
## 3 Wind numeric .
## 4 Temp integer .
## 5 Month integer .
## 6 Day integer .
##
##
## ------------------------------------------------------------------------------
## 1 - Ozone (integer)
##
## length n NAs unique 0s mean meanCI
## 153 116 37 67 0 42.13 36.06
## 75.8% 24.2% 0.0% 48.20
##
## .05 .10 .25 median .75 .90 .95
## 7.75 11.00 18.00 31.50 63.25 87.00 108.50
##
## range sd vcoef mad IQR skew kurt
## 167.00 32.99 0.78 25.95 45.25 1.21 1.11
##
## lowest : 1, 4, 6, 7 (3), 8
## highest: 115, 118, 122, 135, 168

## ------------------------------------------------------------------------------
## 2 - Solar.R (integer)
##
## length n NAs unique 0s mean meanCI
## 153 146 7 117 0 185.93 171.20
## 95.4% 4.6% 0.0% 200.66
##
## .05 .10 .25 median .75 .90 .95
## 24.25 47.50 115.75 205.00 258.75 288.50 311.50
##
## range sd vcoef mad IQR skew kurt
## 327.00 90.06 0.48 98.59 143.00 -0.42 -1.00
##
## lowest : 7, 8, 13, 14, 19
## highest: 320, 322 (2), 323, 332, 334

## ------------------------------------------------------------------------------
## 3 - Wind (numeric)
##
## length n NAs unique 0s mean meanCI
## 153 153 0 31 0 9.96 9.39
## 100.0% 0.0% 0.0% 10.52
##
## .05 .10 .25 median .75 .90 .95
## 4.60 5.82 7.40 9.70 11.50 14.90 15.50
##
## range sd vcoef mad IQR skew kurt
## 19.00 3.52 0.35 3.41 4.10 0.34 0.03
##
## lowest : 1.7, 2.3, 2.8, 3.4, 4.0
## highest: 16.1, 16.6 (3), 18.4, 20.1, 20.7
##
## heap(?): remarkable frequency (9.8%) for the mode(s) (= 11.5)

## ------------------------------------------------------------------------------
## 4 - Temp (integer)
##
## length n NAs unique 0s mean meanCI
## 153 153 0 40 0 77.88 76.37
## 100.0% 0.0% 0.0% 79.39
##
## .05 .10 .25 median .75 .90 .95
## 60.20 64.20 72.00 79.00 85.00 90.00 92.00
##
## range sd vcoef mad IQR skew kurt
## 41.00 9.47 0.12 8.90 13.00 -0.37 -0.46
##
## lowest : 56, 57 (3), 58 (2), 59 (2), 61 (3)
## highest: 92 (5), 93 (3), 94 (2), 96, 97

## ------------------------------------------------------------------------------
## 5 - Month (integer)
##
## length n NAs unique 0s mean meanCI
## 153 153 0 5 0 6.99 6.77
## 100.0% 0.0% 0.0% 7.22
##
## .05 .10 .25 median .75 .90 .95
## 5.00 5.00 6.00 7.00 8.00 9.00 9.00
##
## range sd vcoef mad IQR skew kurt
## 4.00 1.42 0.20 1.48 2.00 -0.00 -1.32
##
##
## level freq perc cumfreq cumperc
## 1 5 31 20.3% 31 20.3%
## 2 6 30 19.6% 61 39.9%
## 3 7 31 20.3% 92 60.1%
## 4 8 31 20.3% 123 80.4%
## 5 9 30 19.6% 153 100.0%
##
## heap(?): remarkable frequency (20.3%) for the mode(s) (= 5, 7, 8)

## ------------------------------------------------------------------------------
## 6 - Day (integer)
##
## length n NAs unique 0s mean meanCI
## 153 153 0 31 0 15.80 14.39
## 100.0% 0.0% 0.0% 17.22
##
## .05 .10 .25 median .75 .90 .95
## 2.00 4.00 8.00 16.00 23.00 28.00 29.40
##
## range sd vcoef mad IQR skew kurt
## 30.00 8.86 0.56 11.86 15.00 0.00 -1.22
##
## lowest : 1 (5), 2 (5), 3 (5), 4 (5), 5 (5)
## highest: 27 (5), 28 (5), 29 (5), 30 (5), 31 (3)

dfSummary(airquality) %>% view(method = 'render')
Data Frame Summary
airquality
Dimensions: 153 x 6Duplicates: 0
| No | Variable | Stats / Values | Freqs (% of Valid) | Valid | Missing | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Ozone [integer] | Mean (sd) : 42.1 (33) min < med < max: 1 < 31.5 < 168 IQR (CV) : 45.2 (0.8) | 67 distinct values | 116 (75.82%) | 37 (24.18%) | ||||||||||||||||||||||||||||||
| 2 | Solar.R [integer] | Mean (sd) : 185.9 (90.1) min < med < max: 7 < 205 < 334 IQR (CV) : 143 (0.5) | 117 distinct values | 146 (95.42%) | 7 (4.58%) | ||||||||||||||||||||||||||||||
| 3 | Wind [numeric] | Mean (sd) : 10 (3.5) min < med < max: 1.7 < 9.7 < 20.7 IQR (CV) : 4.1 (0.4) | 31 distinct values | 153 (100%) | 0 (0%) | ||||||||||||||||||||||||||||||
| 4 | Temp [integer] | Mean (sd) : 77.9 (9.5) min < med < max: 56 < 79 < 97 IQR (CV) : 13 (0.1) | 40 distinct values | 153 (100%) | 0 (0%) | ||||||||||||||||||||||||||||||
| 5 | Month [integer] | Mean (sd) : 7 (1.4) min < med < max: 5 < 7 < 9 IQR (CV) : 2 (0.2) |
|
153 (100%) | 0 (0%) | ||||||||||||||||||||||||||||||
| 6 | Day [integer] | Mean (sd) : 15.8 (8.9) min < med < max: 1 < 16 < 31 IQR (CV) : 15 (0.6) | 31 distinct values | 153 (100%) | 0 (0%) |
Generated by summarytools 0.9.4 (R version 3.6.0)
2020-08-19
2.13 Recursos
Se presentan recursos a consultar para ahondar más en los temas presentados.
Referencias
Chan, C.-h., & Leeper, T. J. (2018). rio: A Swiss-Army Knife for Data I/O. https://CRAN.R-project.org/package=rio
Comtois, D. (2019). summarytools: Tools to Quickly and Neatly Summarize Data. https://CRAN.R-project.org/package=summarytools
R Core Team. (2019). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. https://www.R-project.org/
Revelle, W. (2020). psych: Procedures for Psychological, Psychometric, and Personality Research. https://CRAN.R-project.org/package=psych
Signorell, A. (2020). DescTools: Tools for Descriptive Statistics. https://CRAN.R-project.org/package=DescTools
Waring, E., Quinn, M., McNamara, A., Arino de la Rubia, E., Zhu, H., & Ellis, S. (2019). skimr: Compact and Flexible Summaries of Data. https://CRAN.R-project.org/package=skimr