2016-06-19 1 views
-1

Ich habe eine .txt Datei namens Sales_2015, die fast 1GB von info hat. Die Datei hat die folgenden Spalten:R Schleife durch 20 Millionen Zeilen

AREA|WEEKNUMBER|ITEM|STORE_NO|SALES|UNITS_SOLD 
10GUD| W01_2015 |0345| 023234 |1200 | 12 

Die File's colClasses ist: c(rep("character",4),rep("numeric",2))

Was ich getrennt tun möchte, ist die 1 GB-Datei in Stücke, so dass es schneller lesen wird. Die Anzahl der .txt Dateien, die ich enden möchte, wird durch die Anzahl der BEREICHE Ich habe definiert. (Was ist die erste Spalte).

So habe ich die folgenden Variablen:

Sales <- read.table(paste(RUTAC,"/Sales_2015.txt",sep=""),sep="|",header=T, quote="",comment.char="",colClasses=c("character",rep("numeric",3))) 

Areas <- c("10GUD","10CLJ","10DZV",..................) #There is 52 elements 

ich mit 52 .txt Dateien, die Namen sind zum Beispiel will am Ende:

2015_10GUD.txt (nur ganze Zeilen von Informationen enthalten wird von 1 GB-Datei enthalten, dass 10GUD in der AREA Spalte)

2015_10CLJ.txt (die nur ganze Zeilen von Informationen von 1 GB-Datei enthalten wird, dieenthalten 0)

Ich weiß, diese Frage ist sehr ähnlich zu anderen, aber der Unterschied ist, dass ich mit einer bis zu 20 Millionen Reihen arbeite ... Kann mir jemand helfen, dies mit einer Art von Schleife wie wiederholen oder etwas anderes?

+0

, wenn Sie die 20-Millionen-Reihe 'data.frame' an erster Stelle zu lesen, vielleicht Sie sollten versuchen, 'fread {data.table}' zu verwenden, was waaaay schneller ist als 'read.table' –

+0

' fread' ist ziemlich magisch. Es kann dies wahrscheinlich in 3 Sekunden tun. –

+0

Nicht sicher, wofür die Downvotes da sind. Sie haben vielleicht erklärt, welche Art von Hardware resources wir voraussichtlich haben. Das schränkt das, was möglich ist, stark ein. –

Antwort

5

Keine Notwendigkeit, eine Schleife zu verwenden. Der einfachste und schnellste Weg dazu ist wahrscheinlich data.table. Ich empfehle dringend, die Entwicklungsversion von data.table 1.9.7 zu verwenden. so können Sie die super schnelle fwrite Funktion benutzen, um .csv Dateien zu schreiben. Go here für Installationsanweisungen.

library(data.table) 
setDT(Sales_2015)[, fwrite(.SD, paste0("Sales_2015_", ID,".csv")), 
           by = AREA, .SDcols=names(Sales_2015)] 

auch, würde ich empfehlen Ihnen, Ihre Daten lesen fread{data.table} verwenden, die als read.table waaaay schneller ist

Sales_2015 <- fread("C:/address to your file/Sales_2015.txt") 
+1

danke für den Schnitt @Arun, der Code ist jetzt viel eleganter und intuitiver –

Verwandte Themen