3

私はRを初めて使用し、マトリックスの2つの変数とネット距離(データの最初と最後の点の間のユークリッド距離)から総距離(またはすべてのデータポイントのユークリッド距離の合計)を計算しようとしています.私のデータの背景です. 私のデータは通常 5 つの変数で構成される csv ファイルです: セルのトラック (A と呼ばれます), 時間間隔, 各セルの X と Y の位置, V=速度. データごとに約 90 のトラックがありますまた、各トラックは互いに独立して処理する必要があります。

dput(head(t1))
structure(list(A = c(0L, 0L, 0L, 0L, 0L, 0L), T = 0:5, X = c(668L, 
668L, 668L, 668L, 668L, 668L), Y = c(259L, 259L, 259L, 259L, 
259L, 259L), V = c(NA, 0, 0, 0, 0, 0)), .Names = c("A", "T", 
"X", "Y", "V"), row.names = c(NA, 6L), class = "data.frame")

以前は dist() 関数を知らなかったので、独自の関数を作成しました。

GD.data <- function (trackdata)
{A= trackdata(, 1); V=trackdata(, 5);
 for (i in min(A):max(A))
   while (A<=i) {GD(i) = (sum (V)*(1/25))
                 return (GD(i))} 

これはうまくいきませんでした。トラックの識別子として A を使用しました。総距離は距離 = 速度 (t1-t0) として計算することもできるため、すべての速度の合計に時間間隔を掛けただけです (常に 1/25 秒であるため)。

A を識別子として dist() 関数を使用するにはどうすればよいですか? 各トラックの計算は別々にする必要があるため、これが必要です。ありがとう!

4

1 に答える 1

1

一定の時間間隔で測定された速度があり、これを合計して移動したユークリッド距離の合計を取得できるため、実際にはbaseR 関数を使用して、各トラック識別子ごとにデータaggregateを合計することができます。これは、以下のコマンドが実行することです。VA

aggregate( V ~ A , data = t1 , sum , na.rm = TRUE )

基本的に、これはaggregateA の各値に対して V を意味します。集計関数は次のとおりです (合計の代わりに使用することで、これが各トラックsumの速度になることは容易に想像できます)。which isに追加の引数を渡し、データ内の NA を無視するように指示します (各トラックの NA は at であると想定しています)。meanmeansumna.rmt = 0

トラックごとの最初と最後の位置の間の「カラスが飛ぶように」距離を計算する:

このためsplitに、トラック識別子によってデータフレームをサブデータフレームに分割し、各サブデータフレームの最初と最後の行に単純な斜辺計算を適用してA、データの各サブセットを操作できます。lapply

## Split the data
dfs <- split(t1,t1$A)

## Find hypotenuse between first and last rows for each A
lapply( dfs , function(x){
  j <- nrow(x)
  str <- x[1,c("X","Y")]
  end <- x[j,c("X","Y")]
  dist <- sqrt( sum( (end - str)^2 ) )
  return( dist )
} )
于 2013-04-22T13:43:31.817 に答える