在过去的一年里我使用过R来做各种各样的事情但是由于可用的套餐和功能的数量,我仍然是一个初学者。我相信R会允许我用最少的代码做我想做的事情,但我很挣扎。
我有大约一百个不同的excel文件,其中包含有关学生的数据。每个excel文件代表不同的学校,但包含相同的变量。我需要:
- 将数据从Excel导入R
- 为包含文件名
的每个文件添加变量
- 合并所有数据(添加观察/行 - 不需要匹配变量)
醇>
我需要为多组数据执行此操作,因此我尝试使其尽可能简单且易于复制。
第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文件名,然后尝试使用文件名的变量将它们合并到一个语句中。
当我这样做时,我收到以下错误:
data.frame(res,...)出错: 参数意味着不同的行数:616,1,5
我知道我的lapply应用程序存在问题 - startrow没有被识别为选项而且FILENAMEVAR正在尝试合并5个样本文件名的列表,而不是添加包含文件名的列。
如果有人可以向我推荐一个有用的资源或功能,批评我到目前为止所做的事情,或者指出我的新方向,那将非常感激!
答案 0 :(得分:4)
我会发表我的评论(bdemerast接受错字)。解决方案未经测试,因为xlsx
无法在我的机器上愉快地运行
您需要将FILENAMEVAR
传递给read.xlsx2
。
lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x))