2017-09-08 7 views
1

何千ものExcelワークブック(.xlsx)を含むフォルダーがあります。ワークブックの半分にはDataという名前のシートがあり、半分のシートにはChangesというシートがあります。両方のシートには、同じ種類の情報が含まれています。なぜいくつかはChangesとその他Dataというラベルが付けられている理由や順序はありません。ExcelのオプションシートをオペレーターまたはオペレーターのRに読んでください

現在、私はこのコード

myfiles <- list() 
temp = list.files(pattern="*.xls") 
myfiles = lapply(temp, function(x){as.data.frame(read_excel(x,sheet = 
"Data"))}) 

ですべてのシートに読んしかし、これはData指定にシートに読み込みます。私は

myfiles = lapply(temp, function(x){loadworkbook(x)}) 

で全体としてすべてのブックをロードしようとした場合、私はGCオーバーヘッドの制限に関するエラーを超え得る

myfiles = lapply(temp, function(x){as.data.frame(read_excel(x,sheet = 
"Changes" || sheet = "Data"))}) 

:私は何をしたいか

のようなものです。

答えて

1

orステートメントをそのような方法で引数に渡すことができるとは確信していません。 1つの解決方法は、シート名を読み取って"data"を検索し、そこにある場合は"data"シートを読み取り、読み取らない場合は"changes"シートを読み取ることです。ここでは、1つのファイルに対してこのチェックを実行する関数read_excel_ifを定義してから、temp変数内のすべてのファイルに対してmapこの関数を呼び出し、reducebind_rowsを使用してすべてのファイルを単一のデータフレームにスキップします。 dataframes

library(readxl) 
library(purrr) 
library(dplyr) 

read_excel_if <- function(file_path) { 

    sheets <- excel_sheets(file_path) 
    if ("data" %in% sheets) { 
    df <- read_excel(file_path, sheet = "data") 
    } else { 
    df <- read_excel(file_path, sheet = "changes") 
    } 
    df 
} 

temp %>% map(read_excel_if) %>% reduce(bind_rows) 
関連する問題