3

テキスト ファイルから R に 4 列と 1180598 行のデータをインポートしました。以下は、データの最初の 5 行です。

  Vehicle ID  Time    Vehicle Class  Preceding Vehicle
 1   2        0.1           2               0
 2   2        0.2           2               0
 3   2        0.3           2               0
 4   2        0.4           2               0
 5   2        0.5           2               0

上記の一番左の列はインデックスです。「車両 ID」は、「時間」列に示されている特定の「時間」における車両の ID です。全部で 2169 台の車両がありますが、ここでは車両 2 のみを示しています。「Vehicle Class」は、1=オートバイ、2=乗用車、または 3=トラックのいずれかです。上記のデータでは車です。「先行車両」は、「車両ID」列に記載された車両の先行車両のIDです。

上記の情報を使用して、「先行車両クラス」の新しい列を作成したいと考えています。R が先行車両クラスを見つけるには、まず「先行車両」列を調べてから、「車両 ID」列を調べる必要があります。同じ ID が見つかったら、「車両クラス」に車両のクラスが表示されます。結果を新しい列「Preceding Vehicle Class」に保存します。次のコードを試しましたが、読み込み時間が 5 分を超えても何も起こりません:

for (i in a[,'Preceding Vehicle'])  for (j in a[,'Vehicle ID']) {
if (i==j) {pclass <- a[,'Vehicle ID']} else {pclass <- 0} }
a[,'Preceding Vehicle Class'] <-  pclass

「a」はデータフレームの名前です。コードの修正にご協力ください。

4

2 に答える 2

1

thelatemailaの回答にあるように:

new_a = merge(a, a[, c('VehicleID', 'VehicleClass')], 
              by.x='PrecedingVehicle',
              by.y='VehicleID', 
              all.x=TRUE)

names(new_a) = c("PrecedingVehicle" ,"VehicleID","Time","VehicleClass",
             "Preceding Vehicle Class")

すべての処理は、実際にmergeは 1 行目で行われます。列の名前変更を処理するよりエレガントな方法が見つかりませんでした...

SQL に精通している場合、これはまさに左外部自己結合です。

于 2013-09-30T06:06:39.793 に答える