2017-02-09 4 views
0

Im Folgenden finden Sie Daten-Set:Ausgabe in Datenrahmen benötigen oder nur 1-Header für alle Zeilen der Ausgabe in R

> head(u1spdf) 

      coordinates A Latitude Longitude Altitude Date.No..Of.days   DateTime geodist tdiff 
1 (116.3184, 39.9847) 1 39.98470 116.3184  492   39744.12 2008-10-23 02:53:04 0.00000  0 
2 (116.3184, 39.98468) 2 39.98468 116.3184  492   39744.12 2008-10-23 02:53:10 3.52000  6 
3 (116.3184, 39.98469) 3 39.98469 116.3184  492   39744.12 2008-10-23 02:53:15 2.83000  5 
4 (116.3184, 39.98469) 4 39.98469 116.3184  492   39744.12 2008-10-23 02:53:20 2.74000  5 
5 (116.3183, 39.98465) 5 39.98465 116.3183  492   39744.12 2008-10-23 02:53:25 11.03000  5 
6 (116.318, 39.98461) 6 39.98461 116.3180  493   39744.12 2008-10-23 02:53:30 20.81404  5 

I Einträge müssen von denen giodist größer als 200m und tdiff größer als 1200 ist sec

geodist ist dist zwischen 2 Punkten und und tdiff Zeit diff zwischen 2 Punkten

ich habe unten Algorithmus dafür ist, ausgeführt:

i <- 0 
pointNum <- nrow(u1spdf) #the number of GPS points 
while (i < pointNum) { 
    j <- i+1; Token <- 0; 
    while (j < pointNum) { 
     cdist <- u1spdf$geodist[i+1] #calculated the distance between points 
     #message("cdist: ",cdist) 
     if (cdist > 200 | cdist ==0) { 
      ctime <- u1spdf$tdiff[i+1] #calculated the time span between two points 
      #message("ctime: ",ctime) 
      if (ctime > 1200 | ctime ==0) { 
       print(u1spdf[i+1, ]) 
       i <- j 
       Token <- 1 
      } 
     } 
     break 

     j <- j+1 
    } 

    if (Token!=1) {  
     i <- i+1 
    } 

Dieser Algorithmus haben unten Ausgang gegeben:

   coordinates A Latitude Longitude Altitude Date.No..Of.days   DateTime geodist tdiff 
149 (116.2868, 39.99578) 149 39.99578 116.2868  716   39744.17 2008-10-23 04:08:07 1727.514 3772  
      coordinates A Latitude Longitude Altitude Date.No..Of.days   DateTime geodist tdiff 
471 (116.3202, 40.00478) 471 40.00478 116.3202  105   39744.4 2008-10-23 09:42:25 690.0795 18453 

diese Ausgabe als 1 Datenrahmen benötigen oder ihrem Header jedes Mal wiederholt wird

könnten Sie bitte vorschlagen, wie kann ich über Ausgabe als Daten-Set

erhalten
+2

Sie Angenommen 'rede über ein data.frame: 'newdf <- u1spdf [u1spdf $ Geodist> 200 & u1spdf $ tdiff> 1200,]' – rosscova

+0

Für zukünftige Referenz ist es wichtig, ein minimales reproduzierbares Beispiel für uns zu geben, um zu betrachten. Ihr Beispiel-Dataset enthält keine Zeilen, die Ihre Kriterien erfüllen (Geodist> 200 & tdiff> 1200), was es für jeden schwierig macht, Code auf Ihren Daten zu testen. – rosscova

+0

Danke, beide Lösungen funktionieren. –

Antwort

0

R ist für die Indizierung von Objekten mit anderen Objekten ...

meets_conditions = (u1spdf$geodist > 200 & u1spdf$tdiff > 1200) 
your_desired_output = u1spdf[meets_conditions, ] 

Um eine Erklärung zu liefern, meets_conditions ist ein binärer Vektor der gleichen Länge wie die Anzahl der Zeilen in Ihrem Datenrahmen u1spdf. Es gibt an, welche Zeilen die angegebenen Bedingungen erfüllen. Anschließend können wir sie angeben, welche Zeilen wir aus dem ursprünglichen Datenrahmen auswählen möchten, zu einem neuen Datenrahmen your_desired_output Namen zugewiesen werden, oder Sie können u1spdf[meets_conditions, ] nur direkt in anderen Funktionen wie print(u1spdf[meets_conditions, ])

Verwandte Themen