R - Import & Fusionner Plusieurs Fichiers Excel Et Ajouter Filesource Variable

J'ai utilisé de la R pour différentes choses au cours de la dernière année, mais en raison du nombre de paquets et les fonctions disponibles, je suis encore malheureusement un débutant. Je crois que R me permettrait de faire ce que je veux faire avec un minimum de code, mais j'ai du mal.

Ce que je veux faire:

J'ai à peu près une centaine de différents fichiers excel contenant des données sur les élèves. Chaque fichier excel représente une autre école, mais contient les mêmes variables. J'ai besoin de:

  1. Importer les données dans R à partir d'Excel
  2. Ajouter une variable pour chaque fichier contenant le nom du fichier
  3. Fusion de toutes les données (ajouter des observations/les lignes n'ont pas à correspondre sur les variables)

J'ai besoin de faire cela pour de multiples ensembles de données, donc j'essaye de rendre ce processus aussi simple et facile à reproduire que possible.

Ce que les Données ressembler à:

Ligne 1    Titre
Ligne 2    StudentID    Var1    Var2            Var3      Var4        Var5
De la ligne 3    11234           1         9/8/2011      343      159-167      32
Ligne 4    11235           2         9/16/2011    112      152-160      12
De la ligne 5    11236           1         9/8/2011      325      164-171      44

La ligne 1 est vide de sens et la Ligne 2 contient les noms de variable. Les fichiers ont un nombre différent de lignes.

Ce que j'ai jusqu'à présent:

Au début, j'ai simplement essayé d'importer des données à partir d'excel. À l'aide de l'XLSX paquet, cela fonctionne très bien:

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

Ensuite, je me suis concentré sur de trouver comment fusionner les fichiers (également pensé que c'est là que je dois ajouter le nom de fichier variable pour les fichiers de données). C'est là que je me suis coincé.

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));

J'ai mis mon répertoire, faites une liste de tous les excel les noms de fichiers dans le dossier, et puis essayer de les fusionner en une seule instruction à l'aide de la variable pour les noms de fichiers.

Quand je fais ceci, j'obtiens l'erreur suivante:

Une erreur dans les données.cadre(res, ...) :
arguments impliquent différents nombre de lignes: 616, 1, 5

Je sais qu'il ya un problème avec mon application de lapply - le startrow est pas reconnu comme une option et la FILENAMEVAR est d'essayer de fusionner la liste des 5 exemple de noms de fichiers, par opposition à l'ajout d'une colonne contenant le nom de fichier.

Quelle est la prochaine étape?

Si quelqu'un peut me référer à une ressource utile ou de la fonction, de la critique de ce que j'ai à ce jour, ou m'indiquer une nouvelle direction, il serait GRANDEMENT apprécié!

Dans votre commande do.call("rbind", lapply(... vous avez mal orthographié startrow. Il devrait être startRow.
Votre appel donne actuellement la filenamevar tous les noms de fichier dans les noms de fichiers chaque read.xlsx dans lapply. Si vous exécutez lapply(filenames, function(x) read.xlsx2( sheetIndex=1, colIndex=6, header=TRUE, startrow=2, FILENAMEVAR=x))) ça fonctionne?
bdemarest - bonne prise sur startrow. Mnel - quand je lance le que je reçois l'erreur suivante: Erreur dans le chemin d'accès.développez(fichier) : l'argument "fichier" est manquant, sans valeur par défaut
Avec 2 changements mineurs, @mnel de commande fonctionne pour moi: lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x))
Quand je l'ai essayer avec vos modifications, j'ai le---> Error: unexpected ';' in "do.call("rbind", lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x));"--------> Voici mon code, pouvez-vous voir une simple erreur? : do.call("rbind", lapply(filenames, function(x) read.xlsx2(file=x, sheetIndex=1, colIndex=6, header=TRUE, startRow=2, FILENAMEVAR=x));

OriginalL'auteur ESmith5988 | 2012-11-01