将多个Excel电子表格导入到R

问题描述:

我有一个包含数百个电子表格的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:// *中检查答案。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

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

以迭代的关键是解决这个问题的一个,然后应用到所有。一旦你已经想出了如何做一张纸,其余的很容易。

这是基于你对自己的文件描述了我的猜测。

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,并且在我的经验中往往更容易中断。