2016-10-08 1 views
2

Ich habe eine riesige TXT-Datei namens SDN_1 mit mehr als 1 Million Zeilen. Ich möchte diese Datei in kleinere .txt Dateien aufgeteilt (10.000 Zeilen pro Stück) mit R.R-Code, um große Tabelle in kleinere TXT-Dateien aufzuteilen und auf dem Computer zu speichern?

ich diesen Code verwendet, um die Datei in R zu laden:

SDN_1 <- read.csv("C:/Users/JHU/Desktop/rfiles/SDN_1.csv", header=FALSE) 

Dann habe ich diesen Code zu spalten die Tabelle:

chunk <- 10000 
n  <- nrow(SDN_1) 
r  <- rep(1:ceiling(n/chunk),each=chunk)[1:n] 
d  <- split(SDN_1,r) 

als nächstes möchte ich die Ausgabe der Split-Funktion in separate Dateien als TXT und kodieren als UTF8 speichern. Die Dateien müssen im folgenden Format benannt werden: test_YYYMMDD_HHMMSS.txt

Ich bin neu in R und jede Hilfe wäre willkommen.

UPDATE: Hack-R schlug den folgenden Code zum Erstellen der CSV-Datei vor. Der Code arbeitete unten einmal dann begann ich die Fehlermeldung geben unter:

-Code Hack-R vorgeschlagen:

n <- 1 
for(i in d){ 
con <- file(paste0("file",n,"_", gsub("- 
","",gsub(":","",gsub("","_",Sys.time()))), "_",".csv"),encoding="UTF-8") 
write.csv(tmp, file = con) 
n <- n + 1 
} 

Die Fehlermeldung erhalte ich:

Error in is.data.frame(x) : object 'tmp' not found 
+0

Die Antwort unten funktioniert, aber es scheint nicht die ganze Zeit zu funktionieren. Das erste Mal, als ich es ausführte, funktionierte es und die CSV-Datei wurde in diesem Ordner erstellt (C: \ Users \ JHU \ Documents). Ich habe versucht, Arbeitsverzeichnis mit Setwd (C: \ Users \ JHU \ Desktop \ rfiles) zu ändern, um die generierten .csv-Dateien in R-Dateien herunterzuladen, die ich den Fehler "Error in is.data.frame (x): object 'tmp" nicht gefunden ". – Curious

Antwort

2

Mit dem Code, den Sie bereits haben:

SDN_1 <- mtcars # this represents your csv, to make it reproducible 

chunk <- 10 # scaled it down for the example 
n  <- nrow(SDN_1) 
r  <- rep(1:ceiling(n/chunk),each=chunk)[1:n] 
d  <- split(SDN_1,r) 

n <- 1 # this part is optional 
for(i in d){ 
    con <- file(paste0("file",n,"_", gsub("-","",gsub(":","",gsub(" ","_",Sys.time()))), "_",".csv"),encoding="UTF-8") 
    write.csv(tmp, file = con) 
    n <- n + 1 
} 

Allgemeiner die a und b sagen lassen repräsentieren die Spalten eines größeren Objekts oder einer Sammlung von Objekten in der Umgebung, die Sie wollen programmatisch schreiben:

a <- "a" 
b <- "b" 

Sie einen Vektor ihre Namen bekommen können enthalten:

files <- ls() 

Dann Schleife durch und programmatisch schreibt sie in eine UTF-8 kodierten cSV-Datei wie folgt, das Datum und die Uhrzeit im Format Anfügen von Ihnen angeforderte:

for(i in files){ 
    tmp <- get(i) 
    con <- file(paste0(tmp,"_", gsub("-","",gsub(":","",gsub(" ","_",Sys.time()))), "_",".csv"),encoding="UTF-8") 
    write.csv(tmp, file = con) 
} 

I Sys.time() verwenden für der Zeitstempel mit verschachtelten gsub() s formatieren, wie Sie wollten. Ich habe die Datei nach UTF-8 codiert, wie in this post erläutert.

+0

@BenBolker Bitte beachten Sie meine Bearbeitung, vielen Dank –

+0

Hack-R- danke für Ihre Antwort. Das erste Mal versucht, den Code auszuführen, der funktioniert hat. Dann, als ich versuchte, es erneut zu starten, gab es mir den Fehler "Fehler in is.data.frame (x): object 'tmp' not found". Irgendwelche Vorschläge warum? – Curious

+0

Ok, ich bemerkte, dass ich den Fehler erhalte, wenn ich versuche, das Wortverzeichnis mit setwd() zu ändern. Wäre es möglich, das Arbeitsverzeichnis zu ändern? – Curious

Verwandte Themen