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:
- Importer les données dans R à partir d'Excel
- Ajouter une variable pour chaque fichier contenant le nom du fichier
- 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é!
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
Vous devez vous connecter pour publier un commentaire.
Je vais poster mon commentaire (avec bdemerast ramasser sur la faute de frappe). La solution était pas testé non
xlsx
ne fonctionnera pas correctement sur ma machineVous avez besoin pour passer un seul
FILENAMEVAR
àread.xlsx2
.Vous avez le code pour la fusion
do.call('rbind', lapply(...))
!Oui, je voulais juste préciser parce que je sais que je (en tant que débutant), ce serait un peu perdu si j'essayais de le suivre. Merci!
OriginalL'auteur mnel