2017-09-16 5 views
0

Ich möchte fragen, ob es gibt, um effizient zu arbeiten, um diese Dinge zu behandeln.Lesen Sie mehrere CSV-Dateien und aktualisieren Sie Spalten

(1) Laden von Daten effizient

Da der Dateiname von dem einen anders war ich es in der Umgebung zugewiesen werden soll, habe ich diese 72-mal.

P02 <- read.csv("P02_1.csv") 
P03 <- read.csv("P03_1.csv") 
P04 <- read.csv("P04_1.csv") 
P06 <- read.csv("P06_1.csv") 
P11 <- read.csv("P11_1.csv") 
P12 <- read.csv("P12_1.csv") 
P13 <- read.csv("P13_1.csv") 
P14 <- read.csv("P14_1.csv") 
P15 <- read.csv("P15_1.csv") 

... Aber denken Sie, dass es Tonnen Teilnehmer sind ...

(2) Ändern Sie das Zeitformat effizient

Um das Zeitformat zu ändern, habe ich versucht, dies mit einem ähnlichen Ansatz .

P02$Time <- as.POSIXct(P02$Time, format = "%Y-%m-%d %H:%M:%S")      
P03$Time <- as.POSIXct(P03$Time, format = "%Y-%m-%d %H:%M:%S")      
P04$Time <- as.POSIXct(P04$Time, format = "%Y-%m-%d %H:%M:%S")      
P06$Time <- as.POSIXct(P06$Time, format = "%Y-%m-%d %H:%M:%S")      
P11$Time <- as.POSIXct(P11$Time, format = "%Y-%m-%d %H:%M:%S")      
P12$Time <- as.POSIXct(P12$Time, format = "%Y-%m-%d %H:%M:%S")      
P13$Time <- as.POSIXct(P13$Time, format = "%Y-%m-%d %H:%M:%S")      
P14$Time <- as.POSIXct(P14$Time, format = "%Y-%m-%d %H:%M:%S")      
P15$Time <- as.POSIXct(P15$Time, format = "%Y-%m-%d %H:%M:%S") 

... Nochmals 72 mal.

Gibt es eine Möglichkeit, all diese Dinge effizient zu machen? Hatte einen Sinn zu "For-Schleife" und "zuweisen" -Funktion zu verwenden, wusste aber nicht wie.

+0

Haben Sie in allen csv-Dateien des Verzeichnisses zu lesen? –

Antwort

2

Sie könnten es mit einer for Schleife und der assign Funktion tun, aber ich denke, dass eine elegantere Lösung ist, Ihre Datenrahmen in einer Liste zu speichern. Vorausgesetzt, alle Ihre CSV-Dateien befinden sich im selben Verzeichnis, können Sie die Eingabedateien durchlaufen, sie lesen, transformieren und die Ergebnisse in einer Liste speichern. Hier ein Beispiel:

directory <- "/path/to/your/data" 
files <- list.files(directory) 
data_frames <- vector("list", length(files)) 
for (i in seq_along(files)) { 
    df <- read.csv(file.path(directory, files[i])) 
    df$Time <- as.POSIXct(df$Time, format = "%Y-%m-%d %H:%M:%S") 
    data_frames[[i]] <- df 
} 
2

Wenn Sie in allen csv-Dateien im Arbeitsverzeichnis lesen Sie list.files verwenden können, um ihre Namen zu bekommen und sie dann alle in einem Rutsch zu lesen. Dadurch wird eine Liste von Datenrahmen erstellt, was viel besser ist als 72 Objekte im Arbeitsbereich.

filenames <- list.files(pattern = "csv") 
P_list <- lapply(filenames, read.csv) 
names(P_list) <- sub("(^P[[:digit:]]{2}).*", "\\1", x) 

Jetzt können Sie noch einmal verwenden lapply die Transformation Sie tun möchten.

P_list <- lapply(P_list, function(x){ 
     x$Time <- as.POSIXct(x$Time, format = "%Y-%m-%d %H:%M:%S") 
     x 
}) 

(Ungeprüfte, da gibt es keine realen Daten.)

+0

sollten Sie 'path/to/files' in' list.files' hinzufügen – CPak

+0

@CPak Ich dachte daran, aber das OP liest aus dem aktuellen Verzeichnis. Der Standardwert ist 'path =". "'. Angesichts des OP-Codes gibt es keinen Grund, dies zu ändern. –

+0

ok CPak

Verwandte Themen