我有一个包含数百个电子表格的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。
我可以使用哪些好功能?
谢谢。
答案 0 :(得分:0)
R是一个很好的工具,所以很多东西!在这种特殊情况下,我会在Excel中操作数据,然后将一个大的合并范围导入到R.我始终相信使用正确的工具来处理您正在处理的特定任务。所以,首先从这里下载并安装AddIn。
https://www.rondebruin.nl/win/addins/rdbmerge.htm
因此,将所有工作表(数百个)合并为一个大型工作表。将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,而且往往会根据我的经验打破更多。