我目前正在处理汽车数据。我们每5分钟记录一次汽车的速度,其中包含很多零值。我的问题是,如何按零值对数据进行分段,并在 R 中为每个非零部分指定一个有序数?
我们以一个样本数据为例:
sample <- data.frame(
id = 1:15,
speed = c(50,0, 0, 30, 50, 40,0, 0, 25, 30, 50, 0, 30, 50, 40))
我想添加一个新列,为每个非零部分提供一个数字(从 1 开始),而连续的 k 个零速度(或更多)编号为 0。
具体来说,对于这个示例数据,假设 k 等于 2,那么我想要的结果应该像这样的数据框:
sample_new <- data.frame(
id = 1:15,
speed = c(50,0, 0, 0, 50, 40,0, 0, 25, 30, 50, 0, 30, 50, 40),
number = c(1, 0, 0, 0, 2, 2, 0 ,0, 3, 3, 3, 3, 3, 3, 3))
打印为
id speed number
1 1 50 1
2 2 0 0
3 3 0 0
4 4 0 0
5 5 50 2
6 6 40 2
7 7 0 0
8 8 0 0
9 9 25 3
10 10 30 3
11 11 50 3
12 12 0 3** <- here is the difference
13 13 30 3
14 14 50 3
15 15 40 3
我的数据有超过 100 万行,所以我希望该解决方案的速度可以接受。
设置阈值“k”的原因是,一些驾驶员即使锁车并睡觉也只是将GPS打开。但在其他间隔小于 k 的情况下,他们只是因为十字路口的灯而停下来。我想专注于长时间的停留,而忽略短暂的停留。
希望我的问题对您有意义。谢谢。