2017-03-03 14 views
1

私は何百ものスプレッドシートを持つExcelファイルを持っています。複数のExcelスプレッドシートRにインポート

そうでread.xlパッケージを使用してRにインポートする方法を答えている場合、私は... stackoverflowの上

をいくつかの投稿を読んだことがあるしかし、私は、このファイルのための余分な何かをする必要があります。各スプレッドシートの上部には2行のヘッダーがあり、ヘッダーの最初の行には5桁の数字があり、抽出してテーブルに挿入する必要があります。

たとえば、ヘッダーには11111 ABC Corp.とそのデータセットがあります。 それは次のようになります。

     11111 ABC Corp. 
Product# | Description | Quantity Order | Price | Unit Price 

をここで、私は以下のようにデータをインポートする:あなたは上記を参照ように、多数の5桁が最初の列にコピーする必要があります

ID# | Product # | Description | Quantity Order | Price | Unit Price 
11111 | 2813A  | Whatever | 100 
11111 | 2222B 
11111 | 7721CD 

各スプレッドシートの表の各スプレッドシートには、そのテーブルにコピーする5桁の異なる数字があります。

私は最初の5桁を抽出する方法があれば、おそらくループを使ってこれを行うことができます。

So 1.最初の5桁を抽出します。 2.最初の列に挿入してRにインポートできるループを設計します。

使用できる優れた機能は何ですか?

ありがとうございます。

+1

マクロ/ Visual Basicを使用してExcelでスプレッドシート全体を変更し、CSV形式で保存する場合は、R roを使用してCSVをインポートします。私はExcelマクロを使いやすくしています。あなたがRの中でそれをしたいなら、このQのhttp:// stackoverflowでチェックされた答え。com/questions/26936556/editing-particular-cells-of-excel-sheetには、研究価値のある機能がいくつかあります。 – Paulb

+0

私は最初に 'readLines'を使用して5桁の数字を読み、2番目のステップではスプレッドシートを読み、 'cbind'と一緒に使用して探しているデータフレームを作成します。 – drmariod

+0

'openxlsx :: read.xlsx'は、最初の行(' read.xlsx(fname、rows = 1) ')を別々に読み込み、次にデータ(' read.xlsx(fname、startRow = 2) ' )。タイトル行は少し変換されます(例:スペースからドット)が必要な場合は、数字だけです。単純な 'gsub(" [^ 0-9] "、" "、x)'は良いスタートです。 – r2evans

答えて

0

Rは、そう多くのもののための素晴らしいツールです!この具体的なケースでは、Excelでデータを操作し、大きな結合範囲をRにインポートします。私はいつもあなたがタッキングしている特定のタスクに適切なツールを使用すると信じています。ですから、ここからAddInをダウンロードしてインストールしてください。だから、

https://www.rondebruin.nl/win/addins/rdbmerge.htm

enter image description here

、1つの大規模なワークシートにすべてのワークシート(数百)をマージします。最初のセルをワークシートの最後のセルまでA2に設定します。シートのすべてのそれらの何百一枚にマージされると、CSVとしてそれを保存し、反復の鍵は1のためにそれを解決し、すべてに適用されているR.

mydata <- read.table("c:/mydata.csv", header=TRUE, sep=",", row.names="id") 
0

にインポートします。 1枚のシートを作成する方法を理解したら、残りは簡単です。

あなたのファイルの記述に基づいて推測します。

library(readxl) # to read excel files 
library(readr) # for type_convert 

fname <- "test.xlsx" 

## get sheet names 
sheets <- excel_sheets(fname) 

## function to process a single sheet 
processSheet <- function(sheet, file) { 
    all <- read_excel(file, sheet) # read all data 
    id <- na.omit(names(all)) # extract the ID 
    names(all) <- unlist(all[1, ]) # make the first row the names 
    all <- all [-1, ] # get rid of the first row 
    data.frame(ID = id, # add id column 
       type_convert(all) # convert to appropriate column types 
       ) 
} 

## apply the function to each sheet, collecting the results into a 
## data.frame 
test.data <- do.call(rbind, 
        lapply(sheets, 
          processSheet, 
          file = fname)) 

もちろんExcelファイルを読むためにreadxl以外のものを使用することができます。特定の範囲を読み取ることができると、データを簡単に並べ替えることができます。私がreadxlに行ったのは、私が「ちょうどうまくいく」と感じたのに対し、他の人はJavaやPerlに依存していて、私の経験ではより頻繁に壊れやすいということです。