ESm*_*988 5 import excel merge r import-from-excel
在过去的一年里我使用过R来做各种各样的事情,但是由于可用的软件包和功能的数量,我仍然是一个初学者.我相信R会允许我用最少的代码做我想做的事,但我很挣扎.
我有大约一百个不同的excel文件,其中包含学生的数据.每个excel文件代表不同的学校,但包含相同的变量.我需要:
- 从Excel导入数据到R中
- 将变量添加到包含文件名的每个文件
- 合并所有数据(添加观察/行 - 不需要匹配变量)
我需要为多组数据执行此操作,因此我尝试使其尽可能简单且易于复制.
行1 标题
行2 StudentID VAR1 VAR2 VAR3 VAR4 VAR5
行3 11234 1 2011/9/8 343 159-167 32
行4 11235 2 2011/9/16 112 152-160 12
行5 11236 1 2011/9/8 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)
Run Code Online (Sandbox Code Playgroud)
接下来,我把重点放在搞清楚如何合并文件(也认为这是我应该的文件名变量添加到数据文件).这是我被卡住的地方.
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));
Run Code Online (Sandbox Code Playgroud)
我把我的目录,使所有的文件夹中的Excel文件名列表,然后尝试使用变量作为文件名,以将它们合并在一个语句.
当我这样做时,我收到以下错误:
data.frame(res,...)中的错误:参数意味着行数不同:616,1,5
我知道有我lapply的应用程序中的问题 - STARTROW没有被识别为选项和FILENAMEVAR试图合并5个采样列表中的文件,而不是添加包含文件名的列.
如果任何人都可以参考我一个有用的资源或功能,批判什么,我有这么远,还是指向我一个新的方向,这将不胜感激!
我将发表我的评论(bdemerast 会发现拼写错误)。该解决方案未经测试,因为xlsx无法在我的机器上正常运行
您需要将单个传递FILENAMEVAR给read.xlsx2.
lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x))
Run Code Online (Sandbox Code Playgroud)