Tengo este documento desde hace muuuucho tiempo con mis anotaciones de una clase de un curso de Udemy que obtuve gratis No sé qué hacer con este doc así que lo tengo por acá xd
Existen 2 formas de asignar en R
val = c(1, 2, 3) #primera asignación que es igual a 1.0, 2.0, 3.0
val
## [1] 1 2 3
val <- c(1, 2, 3) #segunda asignación
val
## [1] 1 2 3
#(ambas de tipo numérico)
nombre <- "Riven" #cadena de caracteres o string, guarda el valor
(nombre <- "Mary") #guarda y muestra el valor
## [1] "Mary"
for (i in 1:8){ #Loop o iteración
print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
función_owo <- function(hello){ #hello es cualquier cosa, se le llama parámetro principal
print("Hola mundo, estoy programando") #cuando se llame a esta fx se generará este print
}
función_owo("helou xd")
## [1] "Hola mundo, estoy programando"
#help.start() #muestra la web de Rstudio, manuales, referencias, etc
#?print #muestra información sobre una palabra reservada de Rstudio
#help() #muestra un archivo de ayuda de la fx help
#help("print")
#??print #busqueda exhaustiva de palabras reservada en Rstudio y muestra también páginas de ayuda relacionadas a la palabra
#??regresion #es una busqueda interesante también
#??regression #nos redirecciona a todos los ejemplos relacionados a la palabra regression
#help.search("regression") #lo mismo a ??regression
apropos("class") #nos permite visualizar los derivados de la palabra reservada u otras interacciones con otras palabras reservadas de Rstudio
## [1] ".checkMFClasses" ".class2"
## [3] ".classEnv" ".MFclass"
## [5] ".OldClassesList" ".selectSuperClasses"
## [7] ".valueClassTest" "all.equal.envRefClass"
## [9] "assignClassDef" "charClass"
## [11] "class" "class<-"
## [13] "classesToAM" "classLabel"
## [15] "classMetaName" "className"
## [17] "completeClassDefinition" "completeSubclasses"
## [19] "data.class" "findClass"
## [21] "getAllSuperClasses" "getClass"
## [23] "getClassDef" "getClasses"
## [25] "getRefClass" "insertClassMethods"
## [27] "isClass" "isClassDef"
## [29] "isClassUnion" "isSealedClass"
## [31] "isVirtualClass" "isXS3Class"
## [33] "makeClassRepresentation" "makePrototypeFromClassDef"
## [35] "multipleClasses" "namespaceImportClasses"
## [37] "nclass.FD" "nclass.scott"
## [39] "nclass.Sturges" "newClassRepresentation"
## [41] "oldClass" "oldClass<-"
## [43] "promptClass" "removeClass"
## [45] "resetClass" "S3Class"
## [47] "S3Class<-" "sealClass"
## [49] "selectSuperClasses" "setClass"
## [51] "setClassUnion" "setOldClass"
## [53] "setRefClass" "showClass"
## [55] "superClassDepth" "unclass"
val = 1:8
class(val) #permite saber qué tipo de objeto es (entero, decimal, etc)
## [1] "integer"
#Importación de base de datos, ejemplo
example("read.table") #nos detalla la importación de una base de datos, rd.tbl es un acrónimo a "read.table"
##
## rd.tbl> ## using count.fields to handle unknown maximum number of fields
## rd.tbl> ## when fill = TRUE
## rd.tbl> test1 <- c(1:5, "6,7", "8,9,10")
##
## rd.tbl> tf <- tempfile()
##
## rd.tbl> writeLines(test1, tf)
##
## rd.tbl> read.csv(tf, fill = TRUE) # 1 column
## X1
## 1 2
## 2 3
## 3 4
## 4 5
## 5 6
## 6 7
## 7 8
## 8 9
## 9 10
##
## rd.tbl> ncol <- max(count.fields(tf, sep = ","))
##
## rd.tbl> read.csv(tf, fill = TRUE, header = FALSE,
## rd.tbl+ col.names = paste0("V", seq_len(ncol)))
## V1 V2 V3
## 1 1 NA NA
## 2 2 NA NA
## 3 3 NA NA
## 4 4 NA NA
## 5 5 NA NA
## 6 6 7 NA
## 7 8 9 10
##
## rd.tbl> unlink(tf)
##
## rd.tbl> ## "Inline" data set, using text=
## rd.tbl> ## Notice that leading and trailing empty lines are auto-trimmed
## rd.tbl>
## rd.tbl> read.table(header = TRUE, text = "
## rd.tbl+ a b
## rd.tbl+ 1 2
## rd.tbl+ 3 4
## rd.tbl+ ")
## a b
## 1 1 2
## 2 3 4
example("read.csv") #los archivos comma-separated values (CSV) o archivos de excel separados por una coma
##
## rd.csv> ## using count.fields to handle unknown maximum number of fields
## rd.csv> ## when fill = TRUE
## rd.csv> test1 <- c(1:5, "6,7", "8,9,10")
##
## rd.csv> tf <- tempfile()
##
## rd.csv> writeLines(test1, tf)
##
## rd.csv> read.csv(tf, fill = TRUE) # 1 column
## X1
## 1 2
## 2 3
## 3 4
## 4 5
## 5 6
## 6 7
## 7 8
## 8 9
## 9 10
##
## rd.csv> ncol <- max(count.fields(tf, sep = ","))
##
## rd.csv> read.csv(tf, fill = TRUE, header = FALSE,
## rd.csv+ col.names = paste0("V", seq_len(ncol)))
## V1 V2 V3
## 1 1 NA NA
## 2 2 NA NA
## 3 3 NA NA
## 4 4 NA NA
## 5 5 NA NA
## 6 6 7 NA
## 7 8 9 10
##
## rd.csv> unlink(tf)
##
## rd.csv> ## "Inline" data set, using text=
## rd.csv> ## Notice that leading and trailing empty lines are auto-trimmed
## rd.csv>
## rd.csv> read.table(header = TRUE, text = "
## rd.csv+ a b
## rd.csv+ 1 2
## rd.csv+ 3 4
## rd.csv+ ")
## a b
## 1 1 2
## 2 3 4
library(help = "stats") #nos permite obtener la info de una libreria
#vignette()
#archivos en formato html, pdf, word, papers, etc con respecto al
#lector o al programador
#vignette(withr) #ejemplo
########################Uso de R como una calculadora###############
variable_uwu <- (91/13) - 3
(91/13) - 3 -> variable_uwu
variable_uwu
## [1] 4
#asignar cadena de vectores (valores discretos) a una variable
z <- c(12, 2, 3, 123, 1) #vector de valores de tipo numérico unidimensional
print(z) #impresion explítica
## [1] 12 2 3 123 1
z #impresion implícita
## [1] 12 2 3 123 1
#secuencia de valores:
1:100
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100
seq(from = 1, to=100, by=1) #==1:100
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100
#resta entre 2 vectores
c(1.1, 2.2, 5.5, 4.8) - c(1, 1, 1, 1) #1i + 1j + 1k + 1l
## [1] 0.1 1.2 4.5 3.8
c(1.1, 2.2, 5.5, 4.8) - c(1, 3) #1.1 - 1, 2.2 - 3, 5.5 - 1, 4.8 - 3
## [1] 0.1 -0.8 4.5 1.8
#visualizar objetos o variables que se han creado hasta el momento
ls()
## [1] "función_owo" "i" "ncol" "nombre" "test1"
## [6] "tf" "val" "variable_uwu" "z"
#principales tipos de objetos de Rstudio:
"Hola qué tal" #cadena de caracteres o character
## [1] "Hola qué tal"
colores <- c("rojo", "verde", "azul", "azul", "rojo") #conjunto de cadena de caracteres
colores
## [1] "rojo" "verde" "azul" "azul" "rojo"
#números complejos en R
complejo <- 2+ 1i #ejemplo
#asignación de valores que ya tengo asignados previamente
variable_uwu == 4 # TRUE
## [1] TRUE
variable_uwu == 16 # FALSE
## [1] FALSE
#modificar la longitud de un vector, variable u objeto definido anteriormente
length(complejo) #tiene longitud 1
## [1] 1
length(2) #tiene también longitud 1
## [1] 1
length(complejo) <- 3 #cambiamos la longitud de un valor, le estamos añadiendo 2 valores (NA)
complejo[1]
## [1] 2+1i
complejo[2]
## [1] NA
complejo[2] <- 3+4i #le asignamos un valor a ese NA
complejo[3] <- 5+7i
#cplx == complejo
#expresar cantidades o métricas muy grandes (infinito)
2^1024 #grande, tiende al infinito o "Inf"
## [1] Inf
0/0 #NAN, Non Adding Value
## [1] NaN
#imprimir fecha:
Sys.Date()
## [1] "2023-05-21"
fecha_de_hoy <- Sys.Date()
class(fecha_de_hoy) #no es cadena de caracteres, es un dato de tipo "fecha" o date
## [1] "Date"
#vector de datos numéricos de 10 elementos
valores <- vector(mode = "numeric", length = 10)
class(valores)
## [1] "numeric"
vector(mode = "character", length = 10) #aparecen 10 espacios vacios separados por comillas
## [1] "" "" "" "" "" "" "" "" "" ""
#cadena de valores buleanos, cadena de "FALSE", 0 = false, 1 = true
vector(mode = "logical", length = 10)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#Lista de listas
list(0, "hola", TRUE) #lista con un numérico, un caracter y un booleano
## [[1]]
## [1] 0
##
## [[2]]
## [1] "hola"
##
## [[3]]
## [1] TRUE
c(T, 19, 1 + 3i) #R lo que hará es transformar el tipo de dato con mayor significancia (más relevante) a todos los valores restantes, T = 1 o 1 + 0i, R transformará todos los datos a imaginarios (1+0i 19+0i 1+3i)
## [1] 1+0i 19+0i 1+3i
#como convertir un vector de elementos 0s a booleanos
valores <- vector(mode = "numeric", length = 5)
as.logical(valores) #treansformamos los valores numéricos a booleanos
## [1] FALSE FALSE FALSE FALSE FALSE
valores #si escribimos los valores nos siguen apareciendo valores de 0, no ha sido cambiado, no hemos sobreescrito el tipo de datos
## [1] 0 0 0 0 0
valores <- as.logical(valores) #ahora si sobreescribimos los valores
valores
## [1] FALSE FALSE FALSE FALSE FALSE
#MATRICES############################################################
m <- matrix(data = 1:12, nrow = 4, ncol = 3) #nrow = n° filas, #ncol = n°columnas, 4*3=12 que debe ser igual a la cantidad de datos
m
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
n <- matrix(data = 1:12, nrow = 4, ncol = 3, byrow = T) #cambiamos la secuenciacion de valores, se ordena diferente
n
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
#?matrix
colores
## [1] "rojo" "verde" "azul" "azul" "rojo"
(colores)
## [1] "rojo" "verde" "azul" "azul" "rojo"
factor(colores) #lo cambiamos de character a valores de tipo valor, ya no tiene comillas, y tiene niveles (si se repite la misma palabra 2 veces no lo muestra)
## [1] rojo verde azul azul rojo
## Levels: azul rojo verde
#DATAFRAMES###########################################################
#arreglos rectangulares que detallan una dimensión de datos en X y Y y nos da
#una descripción de valores a fin de visualizar su comportamiento e interpretarlo en su gráfico
data.frame(llave = z, color = colores) #se parece a una matriz, solo que no se tienen espacios vacios o faltantes, n de valores de llave = n valores de color
## llave color
## 1 12 rojo
## 2 2 verde
## 3 3 azul
## 4 123 azul
## 5 1 rojo
#z y colores pasaron de ser variables u objetos a ser un resultado de tipo vector para ser columnas del data frame
#CREACION DE VECTORES A NIVEL MACRO#######################################
vector_xd <- 11:30 #vector de comportamiento discreto, datos de tipo entero, seq(from = 11, to = 30, by =1)
length(vector_xd)
## [1] 20
vector_xd
## [1] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#indexar de derecha a izquierda a vector_xd
vector_xd[3] #13
## [1] 13
rev(vector_xd) #reordena el vector al revez
## [1] 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11
vector_xd[3] #28
## [1] 13
vector_xd[-3] #se imprimen todos los valores menos el tercer valor
## [1] 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
vector_xd[-c(3:5)] #se imprimen todos menos desde el valor 3 al 5
## [1] 11 12 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
vector_xd[1:5] #imprime solo los valores del 1 al 5
## [1] 11 12 13 14 15
vector_xd[c(4,6,13)] #imprime posiciones 4, 6 y 13, no es necesario ponerlos en orden ascendente (13, 4, 6) y se muestran en ese orden
## [1] 14 16 23
vector_xd[[3]] # == vector_xd[3], es lo mismo xd
## [1] 13
vector_xd[rep(c(TRUE, FALSE), 10)] #Indexar al vector booleanos, si esta en true se imprime, si esta en false no se imprime, TRUE, FALSE se repite 10 veces porque 2 x 10 = 20 que es la cant de valores de vector_xd, imprime los que estan en las posiciones impares nomas
## [1] 11 13 15 17 19 21 23 25 27 29
vector_xd[rep(c(FALSE, TRUE), 10)] #imprime posiciones pares
## [1] 12 14 16 18 20 22 24 26 28 30
vector_xd[rep(c(FALSE, FALSE, TRUE))] #imprime valores cuyas posiciones sean múltiplos de 3
## [1] 13 16 19 22 25 28
vector_xd > 20 #imprime como true los valores mayores a 20 == vector_xd[vector_xd > 20]
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
mi_arreglo <- array(seq(from=1, to=18, by=1), dim = c(3, 3, 2))
#arreglo tridimencional de longitud 3 en la primera dimension, long 3 en la segunda dimensión y longitud 2 en la tercera dimensión, es 3D
#array es similar a una matriz pero no es una, es una función para hacer un arreglo ordenado de valores
mi_arreglo
## , , 1
##
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 10 13 16
## [2,] 11 14 17
## [3,] 12 15 18
#Como indexar arreglos
mi_arreglo[1, 3, 2] #primer valor corresponda fila, 2do valor columna, tercer valor corresponde al arreglo (16)
## [1] 16
mi_arreglo[1:2, 1:2, 1] #2 primeras filas y 2 primeras columnas del primer arreglo
## [,1] [,2]
## [1,] 1 4
## [2,] 2 5
#INDEXAR MATRICES#################################################
mi_matriz <- matrix(data = 1:9, ncol = 3, nrow = 3) #data = seq(from = 1, to = 9, by = 1)
mi_matriz
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
#Indexar una fila, una columna o un valor que se encuentra dentro de la matriz
mi_matriz[1, ] #imprime toda la primera fila con respecto a las 3 filas
## [1] 1 4 7
mi_matriz[ ,1] #imprime toda la primera columna respecto a las 3 filas
## [1] 1 2 3
mi_matriz[2:3, ] #primer espacio filas, segundo espacio columnas
## [,1] [,2] [,3]
## [1,] 2 5 8
## [2,] 3 6 9
#imprimir filas que no esten juntas
mi_matriz[c(1,3), ]
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 3 6 9
#CREAR LISTAS######################################################
carro <- list(color = "rojo", nllantas = 4, marca = "Renault", ncil = 4) #lista con diferentes tipos de datos
#indexar un objeto
carro$color #imprime el color del carro, rojo
## [1] "rojo"
carro[c("ncil", "nllantas")]
## $ncil
## [1] 4
##
## $nllantas
## [1] 4
carro$marca # == carro[["marca"]]
## [1] "Renault"
carro[["mar", exact = FALSE]] #qué elemento empieza con mar, exact = F que la exactitud respecto al nombre no este completo
## [1] "Renault"
camioneta <- list(color = "azul", nllantas = 4, marca = "BMW", ncil = 6)
cochera <- list(carro, camioneta)
cochera
## [[1]]
## [[1]]$color
## [1] "rojo"
##
## [[1]]$nllantas
## [1] 4
##
## [[1]]$marca
## [1] "Renault"
##
## [[1]]$ncil
## [1] 4
##
##
## [[2]]
## [[2]]$color
## [1] "azul"
##
## [[2]]$nllantas
## [1] 4
##
## [[2]]$marca
## [1] "BMW"
##
## [[2]]$ncil
## [1] 6
cochera[[c(2,1)]]
## [1] "azul"
# hay una base de datos en R llamada "cars" mph = millas x hora
data("cars") #este es un dataframe
cars$speed
## [1] 4 4 7 7 8 9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15
## [26] 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24 24 24 24 25
length(cars$speed)
## [1] 50
cars$dist>100 #indexar valores booleanos
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [49] TRUE FALSE
cars$dist[cars$dist>100]
## [1] 120
cars$speed[cars$dist>100]
## [1] 24
#View(cars)