5

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

我想做的事:

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

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

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

数据是什么样的:

第 1 行    标题
第 2 行    StudentID 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 个示例文件名的列表,而不是添加包含文件名的列。

接下来是什么?

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

4

1 回答 1

4

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

您需要将单个传递FILENAMEVARread.xlsx2.

lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x))
于 2012-11-01T03:15:06.830 回答