Combine varios archivos CSV por columna, no por fila

Combine varios archivos CSV por columna, no por fila

Tengo ~100 archivos CSV que quiero combinar en una sola hoja de cálculo de Excel (todo en una pestaña, no en pestañas separadas). Estos archivos CSV tienen un formato idéntico: cada uno contiene 4000 filas y 2 columnas con encabezado, con un tamaño aproximado de 60 KB.

Todas las soluciones que he encontrado hasta ahora añaden el siguiente CSV al final de la última fila de la pestaña activa. No he visto uno que pueda agregar nuevos CSV a las columnas inmediatamente a la derecha de la última columna.

A continuación se muestran algunos ejemplos.

  1. Método de copia de DOS: copiar *.csv merge.txt

  2. Esta solución. (Secuencia de comandos VBA).

  3. Usando datos de Excel>Nueva consulta>Desde archivo>Desde carpeta (Excel 2013).

También hay ejemplos con scripts de Windows Powershell para fusionar archivos CSV en Internet.

Todo lo anterior crea una única hoja de cálculo de Excel con alrededor de 400.000 filas de datos, lo cual no me sirve de nada.

Agradecería sugerencias para resolver este problema. ¡Gracias!

Editar. Se encuentra una solución fácil: usar cbind() de r para combinar los datos en un marco de datos y luego escribirlos en un csv. Todo el proceso tomó ~3 segundos. ¡Herramienta adecuada para el trabajo!

Gracias a todos por contribuir. Salud,

--tcollar

Respuesta1

No estoy seguro acerca de Windows 10 "nativo", pero si tiene instalado el Subsistema de Windows para Linux, puede usar el pastecomando UNIX, que debería concatenar los archivos por columnas, de la forma que usted solicita.

Respuesta2

Usando su tercera opción: 'Usando datos de Excel>Nueva consulta>Desde archivo>Desde carpeta (Excel 2013)'

Haga clic en la transform dataopción, esto abre el editor de consultas de energía. Mostrará una lista de los archivos.

Haga clic en el botón en el encabezado de la columna contentpara crear una función que pueda transformar cada archivo CSV individual antes de agregarlo.

Seleccione la tabla u hoja de trabajo correcta y haga lo siguiente en la transform sample filefunción.

  1. Inserte los nombres de las columnas en la primera fila usando "usar encabezados como primera fila"
  2. Tabla de transposición

Luego, en la consulta donde se invoca la función, se agregan los archivos CSV transpuestos. Simplemente transposedevuelva la mesa a su forma original y promuévala the first row to headers.

Respuesta3

Aquí está el código r para combinar archivos csv por columna:

setwd("C:/mycsvdir")
filenames <- list.files(full.name=TRUE)

## read csv, skipping the first two rows of every file
Everything <- lapply(filenames, function(i){read.csv(i, header=TRUE, skip=2)}
combined.df <- do.call(cbind.data.frame, Everything)

write.csv(combined.df, file = "combined.csv", row.names=FALSE)

Si desea combinar archivos csv por fila, simplemente reemplácelos cbindcon rbind.

Editar: Acerca de la secuencia de fusión: mis archivos csv tienen nombres como mycsv 001.csv, mycsv 002.csvetc. Se leyeron y fusionaron exactamente en esa secuencia, lo cual fue excelente para mi propósito.

información relacionada