2017-02-09 21 views
0
以下

における出力のすべての行の1つだけヘッダがデータセットである必要があります。私はgiodistが200メートルよりも大きいのエントリとtdiffを必要はデータフレームで出力を必要とするか、または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 

は、SEC

1200よりも大きいです

:私はこのためのアルゴリズムの下に実行した

geodistは、2点間のDISTであり、そしてtdiff 2点

間の時間差分であります10

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 
    } 

このアルゴリズムは、出力の下に与えられている:1つのデータフレームまたはそのヘッダが毎回

繰り返されるよう

   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 

は、この出力を必要とするあなたは、私がデータセット

として出力上で取得することができますどのように提案してください可能性があり
+2

などの他の関数で直接u1spdf[meets_conditions, ]を使用することができます。 'newdf < - u1spdf [u1spdf $ geodist> 200&u1spdf $ tdiff> 1200、]' – rosscova

+0

今後の参考に、私たちが見るべき最小限の再現可能な例を与えることが重要です。サンプルデータセットに条件を満たす行が含まれていないため(geodist> 200&tdiff> 1200)、誰でもデータのコードをテストすることが困難です。 – rosscova

+0

ありがとうございます、両方のソリューションが動作しています。 –

答えて

0

Rは、他のオブジェクトとのオブジェクトのインデックス作成に最適です...

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

説明を提供するために、meets_conditionsは、データフレームu1spdfの行数と同じ長さのバイナリベクトルです。指定された条件を満たす行を示します。その後、元のデータフレームから選択する行、your_desired_outputという名前の新しいデータフレームに割り当てる行を指定するか、print(u1spdf[meets_conditions, ])

関連する問題