5

20 個の異なる .csv ファイルがあり、データの全体像を把握できるように、R でデータをスタックする方法が必要です。現在、列をコピーして Excel に貼り付け、1 つの大きなデータ セットを作成しています。ただし、最終的には時間がかかるため、R でこれを行うためのより迅速で効率的な方法があると確信しています。

また、さらに悪いことに、一部の変数名は各データセットで同じではありません。たとえば、VARIABLE1 は、一部のデータセットでは variable1 として記述されます。Rは大文字と小文字を区別することを理解しているので、Rでこれをどのように修正しますか?

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

3

パッケージに精通している(または知りたい)場合、これを行う最も簡単で最速の方法は次のdata.tableとおりです(テストされていません):

require(data.table)
in_pth <- "path_to_csv_files" # directory where CSV files are located, not the files.
files <- list.files(in_pth, full.names=TRUE, recursive=FALSE, pattern="\\.csv$")
out <- rbindlist(lapply(files, fread))

list.filesパラメーター:

  • full.names = TRUEファイルへのフルパスを返します。あなたのin_pth <- "c:\\my_csv_folder"と この中に 2 つのファイルがあるとします: 01.csv and 02.csv. 次に、and (フルパスfull.names=TRUE)を返します。c:\\my_csv_folder\\01.csvc:\\my_csv_folder\\02.csv

  • recursive = FALSEフォルダ内のディレクトリ内は検索しません。in_pthにさらに 2 つの csv ファイルがあるとしc:\\my_csv_folder\\another_folderます。これらのファイルをこのファイル内にロードする場合は、 を設定できます。これによりrecursive=TRUE、下を検索するすべてのディレクトリに到達するまでファイルがスキャンされます。

  • pattern=\\.csv$: これは、ロードするファイルの種類を示す正規表現です。フォルダーに csv ファイルに加えてテキスト ファイル (.txt) も含まれている場合、このパターンを指定すると、csvファイルのみが読み込まれます。フォルダに CSV ファイルしかない場合、これは必要ありません。


data.table 関数:

  • rbindlist以前の data.table の名前を保持することにより、列名の競合を回避します。つまり、列名がそれぞれとの 2 つdata.tableのがある場合、 を実行するとへの変更が処理され、 への変更が処理されます。dt1, dt2x,ya,brbindlist(dt1,dt2)a,bx,yrbindlist(dt2, dt1)x,ya,b

  • freadほとんどの場合、列、ヘッダーの区切り記号などを自動的に処理し、非常に高速です (ただし、まだ実験的であるため、出力がすべて正常であることを確認することをお勧めします (安定している場合でも))。

于 2013-06-24T09:54:13.017 に答える
0

plyr@ Denis:パッケージも同じように調べる価値があります。rbind.fill(...) 行ごとに data.frames を組み合わせることができます。

install.packages("plyr")
library(plyr)

help (rbind.fill)詳細については、次を参照してください。

rbinds欠落している列を NA で埋めるデータ フレームのリスト。

使用法

rbind.fill(...) 引数

... 行バインドする入力データ フレーム。最初の引数は、データ フレームのリストにすることができます。この場合、他のすべての引数は無視されます。

詳細

これは、rbindすべての入力に存在しない列を追加し、データ フレームのリストを受け入れ、大幅に高速に動作する拡張機能です。

出力内の列の名前と型は、検出された順序で表示されます。各列が入力で一貫した型であることを確認するためのチェックは実行されません。

私の知る限りではありませんcbind.fillcbind.fillただし、列ごとに data.frames を結合できるユーザー関数があります。詳細はこちら

2 つの解決策があります。1 つは に依存しrbind.fillplyr packageもう 1 つはに依存しませんrbind.fill

于 2013-06-24T13:10:30.250 に答える