Ventas, margen y participación por categoría en seis líneas
Con R base y sin paquetes: sumar por categoría, calcular margen y participación, y ordenar de mayor a menor.
The problem
Te pasan las ventas del mes y la pregunta de siempre: qué categoría vende más, cuál deja más margen y cuánto pesa cada una. No hace falta instalar nada para contestar.
ventas <- data.frame(
categoria = c("Bebidas", "Snacks", "Bebidas", "Limpieza", "Snacks", "Bebidas"),
monto = c(120.5, 80, 210.25, 150, 45.75, 99),
costo = c(70, 52, 130, 110, 30, 61)
)
resumen <- aggregate(cbind(monto, costo) ~ categoria, data = ventas, FUN = sum)
resumen$margen_pct <- round((resumen$monto - resumen$costo) / resumen$monto * 100, 1)
resumen$participacion <- round(resumen$monto / sum(resumen$monto) * 100, 1)
resumen <- resumen[order(-resumen$monto), ]
print(resumen, row.names = FALSE)
Why it is written this way
- aggregate con la fórmula cbind(monto, costo) ~ categoria suma las dos columnas por cada categoría de una vez.
- Las operaciones son vectorizadas: el margen de todas las categorías se calcula en una línea, sin bucle.
- order con el signo menos ordena de mayor a menor.
- Todo es R base: corre en cualquier instalación, sin tidyverse.
Guardalo como resumen.R y corré: Rscript resumen.R. Para tus datos, reemplazá el data.frame por read.csv("ventas.csv").
aggregate descarta en silencio las filas con NA en cualquiera de las columnas. Si tu archivo tiene vacíos, el total va a dar menos sin avisar: revisá con summary(ventas) antes.
Adapt it to your case with AI
The button copies this prompt with the code pasted below it. Replace the brackets with your own details and paste it into ChatGPT, Claude, Gemini or Copilot.
Tengo este resumen de ventas por categoría en R base. Mis datos reales están en [ARCHIVO] con estas columnas: [COLUMNAS]. Adaptalo para leer el archivo, tratar los valores vacíos de forma explícita (decime cuántas filas quedan afuera y por qué), agregar la comparación contra [PERÍODO ANTERIOR] y exportar el resultado a CSV. Sin paquetes externos salvo que sea imprescindible, y decime cuál.
Example written and reviewed by hand.
Comments
No comments yet. Yours can be the first.
Did you adapt it to something of yours?
Tell me what you solved with it, or what it was missing.