2017-05-31 5 views
0

Ich habe 44 .csv-Dateien in meinem WD, die ich schließlich in r lesen und in eine große Datei binden werde. Bevor ich das tue, möchte ich einige Änderungen an den einzelnen Dateien vornehmen. Ich möchte:Bearbeitung mehrerer CSV-Dateien vor dem Lesen in r

  1. ändern einige Spaltennamen in einigen der Dateien
  2. Wählen Sie nur die ersten 10 Spalten jeder Datei

ich einige Informationen über gsub für Problem gefunden habe 1), aber nicht genug, um mich dorthin zu bringen, wo ich sein möchte. Wie für 2) scheint es, dass dies ziemlich einfach sein sollte, aber ich kann online keine Lösung finden.

Vielen Dank!

+1

Lesen Sie es einfach mit einer Funktion, mit der Sie Spalten auswählen (alle können Zeilen begrenzen), z. 'readr :: read_csv'. Oder lies es einfach ein und teile heraus, was du nicht brauchst. – alistaire

Antwort

0

readLines ist dein Freund. Versuchen Sie, jeden von ihnen als separaten Vektor zu importieren, z. my_csv<-readLines("path/to/your/csv") dann die Änderungen durchführen und schließlich speichern Sie die Ausgabe wie folgt:

out <- capture.output(my_csv) 
cat(out, file="my_new.csv", sep="\n", append=F) 

ABER

Ich würde data.table Paket verwenden und insbesondere die fread() Funktion wird dringend empfohlen, die einen schnellen Import von csv der (als data.table Objekte erlaubt) und führen Sie dann sowohl die Auswahl von 10 Spalten als auch die Namensänderung durch. Natürlich über fwrite() können Sie ihre Informationen jederzeit an CSV senden.

ENDLICH

und nur verwenden, wenn die Spalten jeden csv die gleiche Position und Namen haben, um nur die ersten 10 zu halten, wie Sie oben

erwähnt

Eine Kombination aus lapply und data.table kann Wunder tun. Insbesondere:

rbindlist(lapply(list.files("path/to/the/folder/with/csvs"),fread),use.names=TRUE, fill=FALSE) 

wird die meisten Ihrer Daten importieren Probleme zu lösen.

+0

Danke! Das tat, was ich wollte, bis zu einem bestimmten Punkt, aber ich erkannte, dass ich auch eine Spalte mit dem Dateinamen dort hinzufügen muss - habe es ausgearbeitet, um neben zu gehen. –

0

Dies kann funktionieren, um die gewünschte Ausgabe zu erhalten.

# Set path to folder 
    folder.path <- getwd() 

# Get list of csv files in folder 
    filenames <- list.files(folder.path, pattern = "*.csv", full.names = TRUE) 

# Read all csv files in the folder and create a list of dataframes 
    ldf <- lapply(filenames, read.csv) 

# Select the first 10 columns in each dataframe in the list 
    ldf <- lapply(ldf, subset, select = 1:10) 

# Create a vector for the new column names 
    new.col.names <- c("col1","col2","col3","col4","col5","col6","col7","col8","col9","col10") 

# Assign the new column names to each dataframe in the list 
    ldf <- lapply(ldf, setNames, new.col.names) 

# Combine each dataframe in the list into a single dataframe 
    df.final <- do.call("rbind", ldf) 
+0

Danke! Genau das habe ich gesucht. –