2016-04-19 6 views
0

Also, ich absolut saugen Schleifen (wenn Sie irgendwelche empfohlene Dokumentation zu üben mehr, lassen Sie es mich bitte wissen). Im Moment möchte ich jedoch den Zeitunterschied zwischen den Zeitstempeln für jede Instanz und der vorherigen Instanz berechnen (für einige 100.000 Instanzen). Zur Veranschaulichung (Datensatz 'Test'):For Schleife Zeit zwischen den Zeitstempeln zu berechnen

car name  timestamp 
1   2015-05-03 21:15:00 
1   2015-05-03 21:45:00 
1   2015-05-03 22:30:00 
2   2015-05-04 05:45:00 
2   2015-05-04 16:45:00 

Der Zeitstempel ist im POSIXct-Format. Was ich erreichen möchte, ist, dass die Schleife für jedes Auto die Zeitdifferenz in Minuten mit der vorherigen Instanz berechnet, solange es das gleiche Auto ist. Also, würde Ich mag die folgenden Ergebnisse erhalten:

[1] N/A 
[2] 30 
[3] 45 
[4] N/A 
[5] 660 

ich es geschafft, die Zeit zwischen zwei Instanzen mit berechnen:

difftime(test$timestamp[3],test$timestamp[(3-1)],units="mins") 

begann ich es in einer Schleife Platzierung wie folgt:

for(i in test$timestamp){ 
minparked<-difftime(test$timestamp[i],test$timestamp[i-1],units="mins") 
} 

Aber dieses gibt mir Fehler, plus ich muss es sagen, um Zeitunterschied für die erste Reihe eines neuen Autos nicht zu berechnen (so Reihe [1] und [4] zum Beispiel).

Vielen Dank im Voraus für die Hilfe!

+1

Dies scheint ein großartiger Fall für die Vermeidung einer Schleife. Gibt es einen Grund, warum du wirklich einen willst? – BenBarnes

+0

Nopp! Ich dachte nur, es wäre der beste Weg ... aber wirklich glücklich, nicht einen zu benutzen! – zoekdestep

Antwort

2

Vielleicht ist eine doppelte for-Schleife in Ordnung.

output <- c() 
for(car in unique(test$carName)){ 
    tmp <- test[test$carName==car,] 
    out <- c(NA) 
    for(j in 2:nrow(tmp)){ 
    out[j] <- difftime(tmp$timestamp[j],tmp$timestamp[j-1],units="mins") 
    } 
    output <- c(output, out) 
} 
+0

Danke für die Antwort! Das ändert jedoch nichts an der Tatsache, dass es viele verschiedene Auto-Namen gibt, nicht nur einen (oben ist ein Auszug der Daten, es gibt ungefähr 700 verschiedene Auto-Namen). – zoekdestep

+0

Der Code ist speziell dafür geschrieben. Der Zweck der Zeile "für (Auto in Unique (test $ carName)) {" ist die Auswahl der Teilmenge Ihrer Daten für jedes Auto. Egal die Anzahl der verschiedenen Auto Namen –

+0

Sorry, mein Fehler, habe es nicht gut genug gelesen! Vielen Dank, dieses hier funktioniert !! – zoekdestep

Verwandte Themen