2017-03-03 65 views
1

我有一個包含數百個電子表格的Excel文件。將多個Excel電子表格導入到R

我已經在計算器看了幾個帖子在那裏回答如何將它們導入到使用read.xl包等R上...

但我需要做一些額外的文件。每個電子表格頂部有2行標題,標題的第一行有5位數字,我需要將其提取並插入到表格中。

例如,報頭具有11111 ABC公司和低於其數據集。 它應該是這樣的:

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

在這裏,我要導入的數據如下:

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

所以你看上面數的五位數應該被複制到第一列每個電子表格的表格。每個電子表格都有不同的五位數字複製到其表格中。

我在想,如果我有一個方法來提取前五個數字,那麼我也許可以通過使用循環做到這一點。

所以1.提取前五位數字。 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位數字,然後在第二步中,我會讀取電子表格並與'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

所以,合併所有工作表(數百個)成一個龐大的工作。將第一個單元格設置爲A2直到工作表上的最後一個單元一旦所有這些數百張被合併成一個表,將它保存爲一個CSV,並將其導入R.

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

以迭代的關鍵是解決這個問題的一個,然後應用到所有。一旦你已經想出瞭如何做一張紙,其餘的很容易。

這是基於你對自己的文件描述了我的猜測。

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)) 

你當然可以使用其他的東西比readxl讀取Excel文件。某些可以讀取特定範圍的內容將使重新排列數據變得更容易。我與readxl一起去的原因是,我發現它「只是工作」,而其他人依賴於Java或Perl,並且在我的經驗中往往更容易中斷。

相關問題