La función write.csv() en R: guardar tus datos
write.csv() hace lo contrario que read.csv(): coge un data frame y lo guarda en un archivo. Es lo que usarás cuando termines el análisis y tengas que pasarle los resultados a alguien.
Ejemplo simple
resultados <- data.frame(
producto = c("A", "B", "C"),
ventas = c(120, 340, 90)
)
write.csv(resultados, "resultados.csv")
Se guarda en tu directorio de trabajo (getwd() te dice cuál es).
El argumento que hay que poner siempre
Abre ese archivo y verás algo que no habías pedido: una primera columna con los números 1, 2, 3. Son los nombres de fila que R añade por defecto.
Casi nunca los quieres:
write.csv(resultados, "resultados.csv", row.names = FALSE)
Acostúmbrate a escribir row.names = FALSE siempre. Si no, cada vez que exportes y vuelvas a importar, irás acumulando columnas de índices basura.
Que Excel lo abra bien
Si el archivo lo va a abrir alguien con Excel en español, write.csv() a secas le dará problemas: R separa por comas y usa punto decimal, y el Excel español espera punto y coma con coma decimal.
Para eso está write.csv2():
write.csv2(resultados, "resultados.csv", row.names = FALSE)
Y si hay acentos o eñes, conviene forzar la codificación:
write.csv2(resultados, "resultados.csv",
row.names = FALSE, fileEncoding = "UTF-8")
Si aun así tu Excel muestra caracteres raros, prueba con fileEncoding = "latin1".
Ejemplo algo más completo: exportar con la fecha en el nombre
Cuando generas informes de forma periódica, machacar siempre el mismo archivo es mala idea. Mete la fecha en el nombre:
nombre <- paste0("resultados_", Sys.Date(), ".csv")
write.csv2(resultados, nombre, row.names = FALSE)
Sys.Date() devuelve la fecha de hoy y paste0() la pega al resto del texto → obtienes algo como resultados_2026-08-25.csv. Como el formato empieza por el año, al ordenar la carpeta por nombre te quedan cronológicamente ordenados.
Y si quieres guardar varias tablas de una vez, un bucle sencillo basta:
tablas <- list(ventas = resultados, clientes = clientes)
for (nombre in names(tablas)) {
write.csv2(tablas[[nombre]], paste0(nombre, ".csv"), row.names = FALSE)
}