![複数のCSVファイルを行ではなく列で結合する](https://rvso.com/image/1604668/%E8%A4%87%E6%95%B0%E3%81%AECSV%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%A1%8C%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E5%88%97%E3%81%A7%E7%B5%90%E5%90%88%E3%81%99%E3%82%8B.png)
約 100 個の CSV ファイルがあり、それらを 1 つの Excel スプレッドシートに結合したいと考えています (すべてを 1 つのタブにまとめ、別々のタブにはまとめません)。これらの CSV ファイルは形式が同じで、それぞれに 4,000 行と 2 列のヘッダーが含まれ、サイズは約 60 KB です。
これまでに見つけたすべてのソリューションは、アクティブなタブの最後の行の末尾に次の CSV を追加します。最後の列のすぐ右の列に新しい CSV を追加できるソリューションは見たことがありません。
いくつか例を挙げます。
DOS コピー方法: copy *.csv merge.txt
この解決策. (VBA スクリプト)
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
。
- 「ヘッダーを最初の行として使用」を使用して、列名を最初の行に挿入します。
- 転置表
次に、関数が呼び出されるクエリに、転置された 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
などです。それらはまさにその順序で読み込まれ、マージされたので、私の目的にはぴったりでした。