web-dev-qa-db-ja.com

行ではなく列で複数のCSVファイルを組み合わせる

100個までのCSVファイルを1つのExcelスプレッドシートに結合したい(すべてを1つのタブで、別々のタブではなく)。これらのCSVファイルは形式が同じです。それぞれに4,000行と2列のヘッダーが含まれ、サイズは約60 KBです。

これまでに見つけたすべての解決策は、アクティブなタブの最後の行の終わりに次のCSVを追加します。最後の列のすぐ右の列に新しいCSVを追加できるものを見たことがありません。

ここにいくつかの例があります。

  1. DOSコピー方式:コピー* .csv merge.txt

  2. このソリューション 。 (VBAスクリプト。)

  3. Excelの[データ]> [新しいクエリ]> [ファイルから]> [フォルダーから(Excel 2013)]を使用します。

インターネット上のCSVファイルをマージするWindows Powershellスクリプトの例もあります。

上記のすべてが、約400,000行のデータを含む単一のExcelスプレッドシートを作成しますが、これは私には役に立ちません。

この問題を解決するための提案をいただければ幸いです。ありがとう!

編集。簡単な解決策があります。rのcbind()を使用して、データをデータフレームに結合し、それをcsvに書き込みます。プロセス全体に3秒ほどかかりました。仕事に最適なツール!

貢献してくれたみんなに感謝します。乾杯、

--tcollar

2
tcollar

「ネイティブ」のWindows 10については不明ですが、Linux用のWindowsサブシステムをインストールしている場合は、UNIX pasteコマンドを使用できます。これにより、ファイルを列ごとに連結します。

1
Scot

列ごとにcsvファイルを組み合わせるためのrコードは次のとおりです。

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ファイルを組み合わせる場合は、cbindrbindに置き換えます。

編集:マージのシーケンスについて:私のcsvファイルはmycsv 001.csvmycsv 002.csvなどのように名前が付けられています。それらは読み込まれ、そのシーケンスで正確にマージされました。これは私の目的にとって素晴らしいことでした。

0
tcollar

3番目のオプションの使用: 'Excelのデータの使用>新しいクエリ>ファイルから>フォルダから(Excel 2013)'

クリックしてください transform dataオプション。これにより、パワークエリエディターが開きます。ファイルのリストが表示されます。

contentのヘッダーのボタンをクリックして、追加する前に個々のCSVファイルを変換できる関数を作成します。

適切なテーブルまたはワークシートを選択し、transform sample file 関数。

  1. 「ヘッダーを最初の行として使用」を使用して、列名を最初の行に挿入します
  2. 転置テーブル

次に、関数が呼び出されるクエリで、転置されたCSVファイルが追加されます。単にtransposeテーブルを元の形に戻し、the first row to headers

0
Burd