0

モデリング結果の 1 つからの出力を、ある種の ID 列に分離したいと考えています。私はさまざまなnrow間隔を持つ異なる粒子トラック(n = 15000)を持っているので、それら(n_all = 1767333)内で等間隔を仮定することはできません。私の唯一の分離指標は、「0」で始まる「時間」列です。--> 別の「0.000」が表示された場合、ParticleID を 1 増やす必要があります...

さまざまな for ループと if-else 関数を試しましたが、できませんでした... 助けていただければ幸いです。以下のコード例とデータ例。前もって感謝します。

それらの1つは機能しないことを試みます:

#initial seperation process
n_all <- nrow(all_trac)                                   #number of rows - 1767333 rows
n <- nrow(subset(all_trac, all_trac[,"IntTimeloc"] == 0)) #number of particles - 15806 particles
all_trac$Particle_ID <- 1:n_all

#start loop
for (j in 1:n_all)

  for (i in 1:n){

      if (all_trac$IntTimeloc[j] != 0) {

        all_trac$Particle_ID[j] = i

      }

      else

      all_trac$Particle_ID[j] = i+1

  } 

}
#end loop

最終的に出力はどうあるべきか...

IntTimeloc  VXloc           VYloc           VZloc       Particle_ID
0.000   0.0009997907    9.038499e-04    -8.904433e-05   1
1.000   0.0009920447    9.680137e-04    -7.579094e-05   1
3.000   0.0009914209    9.718620e-04    -7.473217e-05   1
...
0.000   0.0008281278    -2.395466e-05   -1.537789e-04   2
9.000   0.0008310459    -2.691492e-05   -1.533394e-04   2
...
4

1 に答える 1

0

たとえば、これを試してください:

transform(dat,id = cumsum(c(1,diff(IntTimeloc)<0)))

 IntTimeloc        VXloc         VYloc         VZloc Particle_ID id
1          0 0.0009997907  9.038499e-04 -8.904433e-05           1  1
2          1 0.0009920447  9.680137e-04 -7.579094e-05           1  1
3          3 0.0009914209  9.718620e-04 -7.473217e-05           1  1
4          0 0.0008281278 -2.395466e-05 -1.537789e-04           2  2
5          9 0.0008310459 -2.691492e-05 -1.533394e-04           2  2
于 2013-03-19T12:35:22.607 に答える