Parte 1: Funciones Básicas- Creando vectores y listas

x <- c(1:10) #estoy creando un vector llamado x que tiene los números del 1 al 10
hola <- list(hola1 = 1:10, hola2 = "amarillo", hola3= "x", "y", "z")
x
##  [1]  1  2  3  4  5  6  7  8  9 10
hola
## $hola1
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $hola2
## [1] "amarillo"
## 
## $hola3
## [1] "x"
## 
## [[4]]
## [1] "y"
## 
## [[5]]
## [1] "z"
y <- c(2:11)
g <- cbind(x,y) #juntamos columnas de vectores
gg <- rbind(x,y) # juntamos filas de vectores

diferentes tipos de vectores

 # tipos de vectores
w <- c(0.5,0.9) # numérico
ww <- c("amarillo", "verde") #categórico
www <- c(TRUE, FALSE ) # lógico

cambiando tipos de objetos

a <- as.character(x) #cambiando x a un caracter
b <- as.logical(x) #cambiando a un valor lógico

funciones básicas

mean(x) # da el promedio 
## [1] 5.5
sd(x) # da la desviación estándar
## [1] 3.02765
length(x) # da el largo del vector
## [1] 10
sum(x) #suma los elementos dentro del vector
## [1] 55
min(x) # da el valor mínimo
## [1] 1
max(x) # da el valor máximo
## [1] 10
sort(x) # ordena valores 
##  [1]  1  2  3  4  5  6  7  8  9 10

selección de datos

x[3] # extrae sólo el tercer dato 
## [1] 3
x[1:5] # extrae datos de 1 al 5
## [1] 1 2 3 4 5
nrow(g) # número de filas
## [1] 10
ncol(g) # número de columnas
## [1] 2
hola$hola2
## [1] "amarillo"

selección de datos un poco más complejo

hola <- list(a= list(1,2,3,4, "amarillo", 1,2,3), b= c(1:10))
# si quisiera el elemento 4 de mi lista a hago lo siguiente
hola[[c(1,4)]] # aquí digo: creáme un vector de la lista uno con el elemento 4 de ella o bien: 
## [1] 4
hola[[1]][[4]] # es lo mismo 
## [1] 4

selección sin NAS

faltantes <- c(1,2,3,NA,NA,6,7)
sinfaltantes <- is.na(faltantes)
faltantes[!sinfaltantes]
## [1] 1 2 3 6 7

estructuras de control

sintaxis: if(condicion1) { ##operaciones } else if (condicion2) { ## otra operación }else{ ## otra operación } ## condicionales

# primer ejemplo de if == 
a <- 2
if(a==2){
  b<- 4
}else{
  b<- 3
}
b
## [1] 4
# segundo ejemplo de if > 

if(a>1){
  c<-2
}else{
  c<-0
}
c
## [1] 2
# tercer ejemplo, asignación a un objeto 
d <- if(a<3){
  10
}else{
  0
}
d
## [1] 10
# cuarto ejemplo sin else
if(a==2){
  e<-3
}
e
## [1] 3

de control

for(rango){ operaciones } ### caracteres

for(i in 1:10){
print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
# creo un objeto llamado color dentro del vector colores que va repitiendo para cada elemento dentro de colores
colores<- c("azul", "amarillo", "rojo")
for(color in colores){
  print(color)
}
## [1] "azul"
## [1] "amarillo"
## [1] "rojo"
for(i in seq_along(colores)){ #hace toda la lista de mi vector 
  print(colores[i])
}
## [1] "azul"
## [1] "amarillo"
## [1] "rojo"
# es lo mismo que 
for(i in 1:length(colores)){ # va desde el 1 hasta el fin de mi vector "colores" 
  print(colores[i])
}
## [1] "azul"
## [1] "amarillo"
## [1] "rojo"
for(i in 2:length(colores)){ # va desde el segundo hasta el fin de mi vector "colores" 
  print(colores[i])
}
## [1] "amarillo"
## [1] "rojo"

números

x <- seq(from= 1, to= 30, by= 5) # va dando los números de 5 en 5 
  for(i in x){
    print(i)
}
## [1] 1
## [1] 6
## [1] 11
## [1] 16
## [1] 21
## [1] 26

Condicional

while(condicion){ operacion }

aaa <- 3
while(aaa < 12){
  print("condicion cumplida")
  aaa <- aaa+2
}
## [1] "condicion cumplida"
## [1] "condicion cumplida"
## [1] "condicion cumplida"
## [1] "condicion cumplida"
## [1] "condicion cumplida"

con más de una condición en el while:

while(aaa < 5 && aaa > 2){
  print(aaa)
  aaa = aaa +1
}

Repeat and break

repeat{ ## operaciones if(condicion){ ## mas operaciones } else { break } }

aaa <- 3

# Bucle con repeat
repeat {
  print(aaa)
  aaa <- aaa + 1
  # Condición para romper el bucle
  if (aaa >= 5) {
    break
  }
}
## [1] 3
## [1] 4

rep

a <- c(1,2,3,4,5)
A <- rep(a, c(1,2,3,4,5)) # estamos diciendo que repetiremos el elemento uno del vector "a" 1 vez, el elemento 2, 2 veces y así sucesivamente...
A
##  [1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5

funciones

apply

ejemplo <- matrix(1:10, nrow= 2, ncol=5)
apply(ejemplo, 1, sum)
## [1] 25 30

lapply

A <- matrix(1:10, 2,5)
B <- matrix(2:11, 2,5)
C <- matrix(3:12, 2,5)
lista <- list(A,B,C)

lapply(lista, "[", 2,1) 
## [[1]]
## [1] 2
## 
## [[2]]
## [1] 3
## 
## [[3]]
## [1] 4
# agarra la segunda columna de las 3 matrices en LISTA

sapply

A <- matrix(1:10, 2,5)
B <- matrix(2:11, 2,5)
C <- matrix(3:12, 2,5)
lista <- list(A,B,C)

sapply(lista, "[", 2,1) 
## [1] 2 3 4
# agarra la segunda columna de las 3 matrices en un solo VECTOR

mapply

mapply(rep,1:4, 4)
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    1    2    3    4
## [3,]    1    2    3    4
## [4,]    1    2    3    4

gráficos

# primero hacemos el "espacio" donde pondremos los puntos
plot(c(1,3), c(1,5), type= "n", xlab = "eje de las x", ylab= "eje de las y", pch= 4)
x <- c(1,2,3) # las posiciones x de los puntos
y <- c(3,4,5) # las posiciones y de los puntos
points(x,y) # graficando los puntos 
linea_reg <- lm(y~x) # una regresión para ver qué tanto de y es predicha por x
abline(linea_reg) # graficamos la línea de regresión 
lines(c(1,3), c(0,5), col= "blue") # una línea que queramos marcar

## ejemplo en un data frame predeterminado de R

plot(iris$Sepal.Length, iris$Sepal.Width, col= "turquoise", pch= 5)
reg <- lm(iris$Sepal.Width~iris$Sepal.Length)
abline(reg)

## histogramas

hist(iris$Sepal.Length, breaks = 10, col = "purple") # con frecuencias

hist(iris$Sepal.Length, freq= FALSE) # sin frecuencias (grafica probabilidades)

## dotchart

dotchart(mtcars$mpg, labels= row.names(mtcars))

## boxplots

boxplot(mpg~cyl, data= mtcars, col= rainbow(3), xlab= "cilindors", ylab= "millas por galón")

expresiones no numéricas

grep

grep("hola", c("hola", "hello", "hi", "hola"))
## [1] 1 4

nchar

nchar(c("hola", "hello", "hi", "hola"))
## [1] 4 5 2 4

paste

paste("hola", "¿cómo", "estás", "?")
## [1] "hola ¿cómo estás ?"

sprint f

i <- 20
sprintf("hola, tengo %d años, en 5 años tendré %d años. Hace 5 años tenía %d años", i, i+5, i-5)
## [1] "hola, tengo 20 años, en 5 años tendré 25 años. Hace 5 años tenía 15 años"

substring

substring("Monterrey, Nuevo León", 1,9 )
## [1] "Monterrey"

str split

strsplit("Monterrey, Apodaca, Santiago, Juárez", ",") # divide cada vez que ve una coma
## [[1]]
## [1] "Monterrey" " Apodaca"  " Santiago" " Juárez"

gregexpr

gregexpr("aaa", "aaacdddcccaaaeworijaaajoijaa")
## [[1]]
## [1]  1 11 20
## attr(,"match.length")
## [1] 3 3 3
## attr(,"index.type")
## [1] "chars"
## attr(,"useBytes")
## [1] TRUE