У меня есть ~100 CSV-файлов, которые я хочу объединить в одну таблицу Excel (все на одной вкладке, а не на отдельных вкладках). Эти CSV-файлы идентичны по формату: каждый содержит 4000 строк и 2 столбца с заголовком, размер около 60 КБ.
Все решения, которые я нашел до сих пор, добавляют следующий CSV в конец последней строки активной вкладки. Я не видел ни одного, которое может добавлять новые CSV в столбцы, расположенные непосредственно справа от последнего столбца.
Вот несколько примеров.
Метод копирования DOS: копировать *.csv merge.txt
Это решение. (Скрипт VBA.)
Использование данных Excel>Новый запрос>Из файла>Из папки (Excel 2013).
Также имеются примеры использования скриптов Windows Powershell для объединения CSV-файлов в Интернете.
Все вышеперечисленное создает одну таблицу Excel с примерно 400 000 строк данных, которая для меня бесполезна.
Буду признателен за предложения по решению этой проблемы. Спасибо!
Редактировать. Найдено простое решение: использование cbind() в r для объединения данных в фрейм данных и последующей записи их в csv. Весь процесс занял ~3 секунды. Правильный инструмент для работы!
Спасибо всем за вклад. Ура,
--tcollar
решение1
Не уверен насчет «родной» Windows 10, но если у вас установлена подсистема Windows для Linux, вы можете использовать paste
команду UNIX, которая должна объединить файлы по столбцам, как вы и просите.
решение2
Используя третий вариант: «Использование данных Excel>Новый запрос>Из файла>Из папки (Excel 2013)»
Нажмите на transform data
опцию, откроется редактор Power Query. Он покажет список файлов.
Нажмите кнопку в заголовке столбца content
, чтобы создать функцию, которая может преобразовать каждый отдельный CSV-файл перед их добавлением.
Выберите нужную таблицу или рабочий лист и выполните в transform sample file
функции следующие действия.
- Вставьте названия столбцов в первую строку, используя «использовать заголовки как первую строку».
- Таблица транспонирования
Затем в запросе, где вызывается функция, транспонированные файлы CSV добавляются. Просто transpose
верните таблицу в исходную форму и продвиньте the first row to headers
.
решение3
Вот код r для объединения CSV-файлов по столбцам:
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)
Если вы хотите объединить CSV-файлы по строкам, просто замените cbind
на rbind
.
Редактировать: О последовательности слияния: мои CSV-файлы называются так mycsv 001.csv
, mycsv 002.csv
и т. д. Они были считаны и объединены именно в этой последовательности, что отлично подходило для моих целей.