Romper el hielo con R: crear objetos, asignar variables, trabajar con vectores y reconocer clases básicas. Actividad pensada para 25–35 minutos.
<-
para asignar y nombres
válidos (sin espacios, no iniciar con número).class()
,
typeof()
, length()
, is.*()
.# Crea 4 objetos:
edad <- 27
nombre <- "Ana"
es_actuario <- TRUE
tasa <- 0.035
# Míralos
edad; nombre; es_actuario; tasa
Mini‑reto 1.1: ¿Qué está mal aquí? Corrige y ejecuta.
# PISTA: nombres inválidos y reasignación correcta
#2tasa <- 3
#mi nombre <- "Luis"
tasa2 <- 3
mi_nombre <- "Luis"
class(edad); typeof(edad)
class(nombre); typeof(nombre)
class(es_actuario); typeof(es_actuario)
class(tasa); typeof(tasa)
Mini‑reto 2.1: Convierte y verifica.
x <- "42"
x_num <- as.numeric(x)
class(x_num); typeof(x_num)
y <- 10
y_char <- as.character(y)
class(y_char); typeof(y_char)
# Construcción
v1 <- c(10, 20, 30)
v2 <- 1:5
v3 <- seq(from = 0, to = 1, by = 0.25)
v4 <- rep(TRUE, 4)
v1; v2; v3; v4
length(v1); length(v2)
Operaciones vectorizadas y funciones básicas
ingresos <- c(100, 120, 90, 110, 130)
ingresos_aj <- ingresos * 1.05 # +5%
sum(ingresos); mean(ingresos); median(ingresos)
Indexación
ingresos[1] # primer elemento
ingresos[2:4] # rango
ingresos[-1] # todos menos el primero
ingresos[ingresos > 110] # filtrado lógico
NA y manejo básico
siniestros <- c(1, 0, 2, NA, 1, 3, 0, 0)
is.na(siniestros)
mean(siniestros) # devuelve NA
mean(siniestros, na.rm = TRUE) # ignora NA
siniestros_sinNA <- ifelse(is.na(siniestros), 0, siniestros)
c(1, 2, "3") # coerción a character
c(TRUE, 2) + 1 # TRUE -> 1
# Reciclaje: se repite el vector corto
c(10, 20, 30, 40) + c(1, 2)
Mini‑reto 4.1: ¿Qué resultado esperas antes de correr lo anterior? Escribe tu predicción en un comentario.
riesgo <- c("Bajo", "Medio", "Alto", "Bajo", "Alto")
riesgo_f <- factor(riesgo, levels = c("Bajo", "Medio", "Alto"), ordered = TRUE)
riesgo_f
class(riesgo_f)
table(riesgo_f)
Con el vector siniestros
ya creado:
NA
por 0
(si no lo
hiciste).tipo_siniestro
: "sin"
si
0
, "con"
si >=1
.names()
como
"P1"
, "P2"
, … "P8"
y filtra solo
los "con"
.# (Completa aquí)
siniestros_clean <- ifelse(is.na(siniestros), 0, siniestros)
tasa_prom <- mean(siniestros_clean)
tipo_siniestro <- ifelse(siniestros_clean == 0, "sin", "con")
names(siniestros_clean) <- paste0("P", seq_along(siniestros_clean))
siniestros_con <- siniestros_clean[tipo_siniestro == "con"]
tasa_prom
tipo_siniestro
siniestros_con
Siguiente actividad: data frames y listas (spoiler: todo es una lista… casi).