多个Excel电子表格导入到R

时间:2017-03-03 15:37:51

标签: r

我有一个包含数百个电子表格的Excel文件。

我已经在stackoverflow上阅读了一些帖子,在那里我们回答了如何使用read.xl软件包将它们导入R等等......

但我需要为此文件做一些额外的事情。每个电子表格顶部有2行标题,标题中的第一行有5位数字,我需要提取并将其插入表格。

例如,header下面有11111 ABC Corp.及其数据集。 它应该是这样的:

                     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。

我可以使用哪些好功能?

谢谢。

2 个答案:

答案 0 :(得分:0)

R是一个很好的工具,所以很多东西!在这种特殊情况下,我会在Excel中操作数据,然后将一个大的合并范围导入到R.我始终相信使用正确的工具来处理您正在处理的特定任务。所以,首先从这里下载并安装AddIn。

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

enter image description here

因此,将所有工作表(数百个)合并为一个大型工作表。将First Cell设置为A2直到工作表上的最后一个单元格。将所有这些数百张纸合并为一张后,将其另存为CSV,然后将其导入R.

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

答案 1 :(得分: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的原因是我发现它只是工作&#34;而其他人则依赖于Java或Perl,而且往往会根据我的经验打破更多。