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 文件并添加文件源变量的主要内容,如果未能解决你的问题,请参考以下文章