R - 导入和合并多个 Excel 文件并添加文件源变量

Posted

技术标签:

【中文标题】R - 导入和合并多个 Excel 文件并添加文件源变量【英文标题】:R - Import & Merge Multiple Excel Files And Add Filesource Variable 【发布时间】:2012-10-21 14:41:45 【问题描述】:

在过去的一年里,我将 R 用于各种事情,但是由于可用的包和功能的数量,我仍然是一个初学者。我相信 R 可以让我用最少的代码做我想做的事,但我正在苦苦挣扎。

我想做什么:

我有大约一百个不同的 Excel 文件,其中包含学生数据。每个 excel 文件代表不同的学校,但包含相同的变量。我需要:

    将数据从 Excel 导入 R 为每个包含文件名的文件添加一个变量 合并所有数据(添加观察/行 - 不需要匹配变量)

我需要对多组数据执行此操作,因此我试图使其尽可能简单且易于复制。

数据是什么样的:

第 1 行  标题第 2 行  学生 ID   Var1   Var2         Var3     Var4      Var5第 3 行 11234 1 9/8/2011 343 159-167 32 行4 11235 2 9/16/2011 112 152-160 12 行5 11236 1 9/8/2011 325 164-171 44

第 1 行没有意义,第 2 行包含变量名称。这些文件有不同的行数。

到目前为止我所拥有的:

起初我只是尝试从 excel 导入数据。使用 XLSX 包,效果很好:

dat <- read.xlsx2("FILENAME.xlsx", sheetIndex=1, 
                  sheetName=NULL, startRow=2, 
                  endRow=NULL, as.data.frame=TRUE, 
                  header=TRUE)

接下来,我专注于弄清楚如何合并文件(也认为这是我应该将文件名变量添加到数据文件的地方)。这就是我卡住的地方。

setwd("FILE_PATH_TO_EXCEL_DIRECTORY")
filenames <- list.files(pattern=".xls")
do.call("rbind", lapply(filenames, read.xlsx2, sheetIndex=1, colIndex=6, header=TRUE, startrow=2, FILENAMEVAR=filenames));

我设置了我的目录,列出了文件夹中所有的 excel 文件名,然后尝试使用文件名的 a 变量将它们合并到一个语句中。

当我这样做时,我收到以下错误:

data.frame(res, ...) 中的错误: 参数暗示不同的行数:616、1、5

我知道我的 lapply 应用程序存在问题 - startrow 未被识别为选项,并且 FILENAMEVAR 正在尝试合并 5 个示例文件名的列表,而不是添加包含文件名的列。

接下来呢?

如果有人可以向我推荐一个有用的资源或功能,批评我目前拥有的东西,或者为我指出一个新的方向,我们将不胜感激!

【问题讨论】:

在你的命令do.call("rbind", lapply(... 中你拼错了startrow。应该是startRow 您的调用当前为 filenamevar 提供了文件名中的所有文件名,每个 read.xlsx 在lapply 中被调用。如果你运行lapply(filenames, function(x) read.xlsx2( sheetIndex=1, colIndex=6, header=TRUE, startrow=2, FILENAMEVAR=x))) 可以吗? bdemarest - startrow 不错。 Mnel - 当我运行时出现以下错误:path.expand(file) 中的错误:缺少参数“file”,没有默认值 有 2 个小改动,@mnel 的命令对我有用:lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x)) @bdemarest - 当我尝试使用您的更改时,我得到以下信息---> Error: unexpected ';' in "do.call("rbind", lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x));"--------> 这是我的代码,你能看出一个简单的错误吗? :do.call("rbind", lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x)); 【参考方案1】:

我会发表我的评论(bdemerast 会发现错字)。该解决方案未经测试,因为xlsx 在我的机器上无法正常运行

您需要将单个FILENAMEVAR 传递给read.xlsx2

lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x))

【讨论】:

这很好用,对代码的唯一补充是将数据集合并到一个矩阵中的最后一步,以便它们可以输出回 excel。 你有合并do.call('rbind', lapply(...))的代码! 是的,我只是想澄清一下,因为我知道我(作为一个初学者)如果我试图跟随,我会有点迷失。谢谢!

以上是关于R - 导入和合并多个 Excel 文件并添加文件源变量的主要内容,如果未能解决你的问题,请参考以下文章

Excel多个文件合并到一个工作簿里

如何在 R 中导入和合并多个文件?

如何使用python合并多个excel文件

如何将R语言中的表格数据输出为Excel文件

将多个Excel文件导入一个Access表时如何添加文件名

如何将n个excel表格合并在同一份excel中的同一表格中,他们的表头都一样