2016-08-02 30 views
0

Die folgende Schleife dauert ewig. Gibt es dafür einen effizienteren Weg? Die folgende Tabelle besteht aus 27 Variablen und mehr als 600.000 Beobachtungen.R Schleifenoptimierung/Schleife ist viel zu zeitaufwendig

data <- read.table("file.txt", header = T, sep= "|") 
colnames(data)[c(1)] <- c("X") 
data <- as.data.table(data) 
n=1; 
vector <- vector() 
for(i in 2:nrow(data)) 
{ 
    if(data[["X"]][i] != data[["X"]][i-1]) 
    { 
    n=1; vector[i]=1} 
else { 
    n=n+1; vector[i]=n}} 

Grundsätzlich ich brauche jedes Auftreten eines eindeutigen Eintrag in X, das heißt das erste Mal erschien es, das zweite Mal erschien es, usw. und dann zusammenführen, dies zu den vorhandenen Daten als zusätzliche Spalte zu indizieren. Allerdings habe ich beim Übersetzen des Vektors eine Bestandsaufnahme erhalten.

Vielen Dank.

+0

eine zeitaufwendige Art und Weise? – MichaelChirico

+0

Wo wird 'Vektor' initiiert? –

+0

auch wo ist 'n' initiiert ... – MichaelChirico

Antwort

3

First off, verwenden fread:

DT <- fread("file.txt", sep = "|") 

Als nächstes benutzen setnames:

setnames(DT, 1, "X") 

Schließlich verwenden rowid:

DT[ , vector := rowid(X)]  
+0

Es hat funktioniert ... Danke! –