我想将我的一个建模结果的输出分成某种ID列。由于我有不同的粒子轨迹(n = 15000),具有不同的nrow间距,因此我不能假设它们之间具有相等的间隔(n_all = 1767333)。我唯一的分离指标是“时间”列,以“0”开头。 - >所以如果出现另一个“0.000”,则ParticleID应该增加一个...
我尝试了不同的for循环和if-else函数,但我无法这样做...... 我将衷心感谢您的帮助。代码示例和数据示例如下。提前谢谢。
其中一个不正在工作:
#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
...
答案 0 :(得分: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