複数のCSVファイルを行ではなく列で結合する

複数のCSVファイルを行ではなく列で結合する

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

これまでに見つけたすべてのソリューションは、アクティブなタブの最後の行の末尾に次の CSV を追加します。最後の列のすぐ右の列に新しい CSV を追加できるソリューションは見たことがありません。

いくつか例を挙げます。

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

  2. この解決策. (VBA スクリプト)

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

インターネット上には、CSV ファイルを結合するための Windows Powershell スクリプトの例もあります。

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

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

編集簡単な解決策が見つかりました。r の cbind() を使用してデータ フレーム内のデータを結合し、それを csv に書き込みます。プロセス全体に約 3 秒かかりました。この作業に最適なツールです。

ご協力いただいた皆様、ありがとうございました。

--t襟

答え1

「ネイティブ」Windows 10 についてはわかりませんが、Windows Subsystem for Linux がインストールされている場合は、UNIXpasteコマンドを使用できます。このコマンドは、要求されている方法でファイルを列ごとに連結します。

答え2

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

オプションをクリックするとtransform data、Power Query エディターが開きます。ファイルのリストが表示されます。

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

適切なテーブルまたはワークシートを選択し、関数で次の操作を実行しますtransform sample file

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

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

答え3

列ごとに 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 ファイルを行ごとに結合したい場合は、cbindを に置き換えるだけですrbind

編集: マージの順序について: 私の csv ファイルの名前はmycsv 001.csv、、mycsv 002.csvなどです。それらはまさにその順序で読み込まれ、マージされたので、私の目的にはぴったりでした。

関連情報