2017-08-20 8 views
1

ディレクトリに置かれている約50-60 Excelブックがあります。これらのExcelファイルはすべて同じものです。 2つのワークシートがあります.1つは説明書付きで、もう1つはすべてのシートに同じ整理されたデータがあります。 Columns/vars AからJまでは、実際に抽出したいデータですが、すべてをdata.frameに読み込んでいます。データはA〜N colsまで出力されます。dplyr :: bind_rowsでExcelファイル名を指定する.id

私はすべての生データを抽出するためのスクリプトを作成しています。私のスクリプトの一部は、list.filesの標準的な手法を使ってファイル名の「df」を構築しています。次に、私は 'lapply'を使ってすべてのExcelファイルをリストに読み込みます。今ここにはこすりが来る。

dplyr :: bind_rows(他の提案にもオープンしています)を使用して、同じヘッダーを共有しているため、すべての行を一緒にバインドします。これは私の概念証明で素晴らしい作品です。それにdplyr :: bind_rowsの.id引数を使用すると、list内のdata.frameの位置に対応するid varとして1からjを取得します。

files.list <- list.files(pattern='*.xlsx') # list file names in directory 
df.list <- lapply(files.list, read_excel) # read excel into a list of dfs 
df <- bind_rows(df.list, .id = "id") # bind the rows of the dfs together 

data.frameが読み込まれたリストの位置とは対照的に、実際のファイル名を取得できますか?もしそうなら、どうすればいいのですか?

+0

コードを入力してください。あなたが求めていることは本当にはっきりしません。ファイル名ではなく、どのようにディレクトリの位置を取得していますか? – Abdou

+1

私はdownvoteしませんでした。私は投票に落ちる前にコメントを残しておきます。 – Abdou

答えて

1

setNamesを使用してファイル名のデータフレームのリストの名前を変更してください。 ?bind_rowsから:.idラベルは、指定された引数からbind_rows()に取り込まれます。データフレームのリストが供給されるとき、ラベルはリストの名前から取られます。名前が見つからない場合は、数値シーケンスが代わりに使用されます。

files.list <- list.files(pattern='*.xlsx') 
df.list <- setNames(lapply(files.list, read_excel), files.list) 
df <- bind_rows(df.list, .id = "id") 
+1

勝者のチキンディナー! – Zach

+0

これは素晴らしく働いた。それは、それが来た場所からのデータにファイル名を関連付けるのを助けました。監査証跡の保存に大きな助けとなります。 – Zach

関連する問題