require(purrr)
require(xlsx)
私は多くのシートを含むExcelワークブックを読んでいます。各シートには1つのオブジェクトのデータが含まれているので、すべてのシートを読み込み、2つの変換を適用してから、rbind
をすべて一緒に読み込もうとしています。マップを使用してエラーを返すExcelシートのリストに関数を適用する
私はすべてのデータが1列にあるので、私はfieldnames
とvalues
に分割するために正規表現を使用して変換するために、このヘルパー関数を書きました:
dfTransform <-function(sheet){
fieldnames <- apply(sheet,2,function(x) gsub("(^.*?):.*","\\1",x))
values <- apply(sheet,2,function(x) gsub("(^.*?:\\s)","",x))
df <- data.frame(fieldnames,values)
df$name <- sheets[sheet]
return(df)
}
は、シート名を取得し、その後、使用したExcelシートを読み込みますlapply
:
wb <- loadWorkbook(path)
sheets <- names(getSheets(wb))
x <- lapply(sheets,function(x) read.xlsx("C://Users/591043/Desktop/EmployeeBGData.xlsx",x,header=F))
のでx
は、データフレームのリストです。
Error in sheets[sheet] : invalid subscript type 'list'
誰もが間違って何が起こっているのかを知っている:
今、私は単に
x %>% map(dfTransform)
%>% reduce(rbind)
しかしmap(dfTransform)
はエラーをスローすることができ、ここからだと思いますか?
私は実際のデータを提供することができません。このためのお詫びは再現可能な例ではありません。これで問題を解決するには十分ではない場合、私は試していくつか生成することができます。
'sheets'はリストです。あなたは 'sheets [[sheet]]'が必要です。また、rbindlistよりもはるかに高速であり、これらの種類の作業に対応しやすいrbindlistを参照することをお勧めします。 – shreyasgm
は 'map_df'を使うかもしれません –