Wie liest man mehrere xlsx-fileen in R mit einer loop mit bestimmten Zeilen und Spalten?

Ich muss mehrere xlsx-file mit randomen Namen in einzelnen datarahmen lesen. Die Struktur jeder file ist gleich. Ich muss nur bestimmte Spalten importieren.

Ich habe es versucht:

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

Aber das ist nur für eine file zu einer time und ich konnte meine bestimmten Spalten nicht angeben. Ich habe es sogar versucht:

 site=list.files(pattern='[.]xls') 

aber nach dieser loop funktioniert nicht. Wie es geht? Danke im Voraus.

  • nicht initialisierte Konstante Spreadsheet :: Link - roo gem - xlsx file
  • Warum wird mein Wert "definierter Name" (Bereich) nicht mit diesem Spreadsheet Light-Code festgelegt?
  • Exportieren eines Arrays zur Excel-file mit Zellformatierung
  • Eine list von listn aus einer Excel-filespalte lesen und in einer Python-list speichern
  • Schnelle Möglichkeit, einfache characterfolgen aus Excel xlsx-fileen zu extrahieren
  • Laden der Excel-file Stück für Stück mit Python, anstatt die gesamte file in den memory zu laden
  • Wie Debuggen von Undeclared Entity Fehlern in Microsoft XLSX-fileen
  • Parsen Sie xls / xlsx / xlsm in Node.js
  • 3 Solutions collect form web for “Wie liest man mehrere xlsx-fileen in R mit einer loop mit bestimmten Zeilen und Spalten?”

    Ich würde jedes Blatt zu einer list lesen:

    filenamen abrufen:

     f = list.files("./") 

    fileen lesen:

     dat = lapply(f, function(i){ x = read.xlsx(i, sheetIndex=1, sheetName=NULL, startRow=5, endRow=NULL, as.data.frame=TRUE, header=T) # Get the columns you want, eg 1, 3, 5 x = x[, c(1, 3, 5)] # You may want to add a column to say which file they're from x$file = i # Return your data x }) 

    Sie können dann auf die Elemente in Ihrer list zugreifen mit:

     dat[[1]] 

    Oder mache ihnen die gleiche Aufgabe mit:

     lapply(dat, colmeans) 

    Verwandle sie in einen datarahmen (wo deine filespalte jetzt nützlich wird):

     dat = do.call("rbind.data.frame", dat) 

    Ich kenne eher eine for-loop, die etwas umständlicher sein kann.

    filelist <- list.files(pattern = "\\.xlsx") # listet alle xlsx-fileen aus dem Verzeichnis auf

     allxlsx.files <- list() # create a list to populate with xlsx data (if you wind to bind all the rows together) count <- 1 for (file in filelist) { dat <- read.xlsx(file, sheetIndex=1, sheetName=NULL, startRow=5, endRow=NULL, as.data.frame=TRUE, header=TRUE) [c(5:10, 12,15)] # index your columns of interest allxlsx.files[[count]] <-dat # creat a list of rows from xls files count <- count + 1 } 

    zurück in data.frame konvertieren

     allfiles <- do.call(rbind.data.frame, allxlsx.files) 

    Für eine Variante von Wyldsouls Antwort, aber mit einer for-loop über mehrere Excel-Blätter (zwischen 1 und j) in der gleichen Excel-file und Bindung mit dplyr:

     library(gdata) library(dplyr) for (i in 1:j) { dat <- read.xls(f, sheet = i) dat <- dat[,1:14] # index your columns of interest allxlsx.files[[count]] count <- count + 1 } allfiles <- do.call(bind_rows, allxlsx.files) 
    Spreadsheet (Microsoft Excel) makes working easy.