2016-03-30 4 views
0

Ich habe einen Ordner mit zahlreichen xlsx-Dateien, die alle auf genau die gleiche Weise formatiert werden müssen. Ich möchte sie in R lesen und sie als Listen speichern, die mit dem xlsx-Dateinamen referenziert werden können, damit ich sie über meinen Formatierungscode füttern kann. Dies ist der Code, den ich gefunden habe, der sie basierend auf dem Iterationswert in der for-Schleife kennzeichnet.Wie kann ich mehrere xlsx-Dateien in R einlesen und sie dann als separate Listen speichern, die mit dem xlsx-Dateinamen versehen sind?

library("xlsx") 
library("gdata") 
library("rJava") 


setwd("C:/Users/Owner/Desktop/FolderDatabase") 
getwd() 

files = list.files(pattern = "\\.xlsx") 
#View(files) 

dfList <- list() 
for (i in seq_along(files)){ 
dfList[[paste0("excel",i)]] <- read.xlsx(files[i], sheetIndex = 1) 
} 


# Calling the xlsx lists that were created from the directory 
dfList$excel1 
dfList$excel2 
dfList$excel3 
dfList$excel4 

Wenn die xlsx Datei myname1.xlsx benannt ist, würde ich die Liste gerne genannt myname1 werden.

+0

Sehr nahe zum Duplizieren - http://StackOverflow.com/Questions/5758084/Loop-in-R-loading-files – thelatemail

Antwort

1

Anstatt dfList als leer initialisiert, versuchen Sie nicht für Ansatz:

dfList <- lapply(files, read.xlsx, sheetIndex = 1) 
names(dfList) <- gsub("^.+/|\\.xlsx", "", files) 

Oder einfach:

dfList <- sapply(files, read.xlsx, sheetIndex = 1) 

Der erste Teil dieser zweiteiligen Muster in es ist, weil ich in der Regel wor mit vollständige Dateispezifikation, obwohl sie in Ihrem Fall wahrscheinlich nicht benötigt wird. Der zweite Teil des "ODER" ("|") wird benötigt.

+0

Ist nicht 'sapply' hier erforderlich, da' lapply' nicht die Namen von a zurückgibt Vektor? I.e. 'sapply (Dateien, ich, simplify = FALSE)' vs 'lapply (Dateien, I)' – thelatemail

+0

'lapply' wurde gewählt, weil es garantiert eine Liste liefert. Ich denke nicht, dass 'sapply' und' lapply' die Namensgebung der Liste anders handhaben, aber ich habe mich vorher geirrt. Ich übergab einen Vektor von Dateinamen, um gelesen zu werden. Ich denke nicht, dass "ich" hilfreich wäre. –

+0

'I' war nur eine Beispielfunktion - es scheint,' s/lapply' macht einen Unterschied - 'sapply (c (" eins "," zwei "), Funktion (x) data.frame (a = 1), simplify = FALSE) 'vs.' lapply (c ("eins", "zwei"), Funktion (x) data.frame (a = 1)) ' – thelatemail

Verwandte Themen