我有一个序列向量,在给定的公共车站,每分钟有#辆自行车。假设值如下:
num_biks <- data.frame(num_bikes = c(7, 7, 8, 8, 9, 9, 10, 8, 8, 7, 7, 9),
mins_until_arrival = c(2,
1, 2, 1, 2, 1, 5, 4, 3, 2, 1, NA), mins_until_taken = c(7, 6, 5, 4, 3, 2,
1, 1, 1, NA, NA, NA))
num_biks <- cbind(num_biks, any_change = unlist(lapply(rle(num_biks$num_bikes)$lengths,
seq, by = -1)))
num_biks
#> num_bikes mins_until_arrival mins_until_taken any_change
#> 1 7 2 7 2
#> 2 7 1 6 1
#> 3 8 2 5 2
#> 4 8 1 4 1
#> 5 9 2 3 2
#> 6 9 1 2 1
#> 7 10 5 1 1
#> 8 8 4 1 2
#> 9 8 3 1 1
#> 10 7 2 NA 2
#> 11 7 1 NA 1
#> 12 9 NA NA 1
因此,在第一列中,第0分钟有7辆自行车,第1分钟有7辆自行车,第2分钟有8辆自行车,以此类推。。
我想计算两件事:直到一辆自行车
取出
以及在车站放置新自行车之前的分钟数。
对于第一种情况,新列为
mins_until_arrival
,其中每行显示自行车行驶前的分钟数
已添加
未来但请注意,从第7排开始,自行车的数量就减少了,因此我需要计算分钟数,直到从第7排开始,自行车的数量增加为止,所以第12排是增加了至少一辆自行车。因为我们不知道什么时候会增加一辆新自行车,最后一排是NA。
我需要的第二个参数是倒数,所以自行车
已拍摄
从车站。这就是专栏
mins_until_taken
从这里你可以看到,从第一分钟开始,骑自行车离开车站需要7分钟。当然,如果系列赛结束,一辆新自行车还没有推出,我不知道什么时候会推出一辆新自行车,所以像NA这样的车就可以了。
我第一次尝试使用
rle
计算分钟数,直到有任何变化(无论是采取还是放置),并尝试确定增加或减少,但变得太复杂。我提供
rle公司
如果有帮助,尝试一下。
考虑两件事:我将情况简化为一个站点,但我必须将其应用于近30 GB数据集上的N个站点,因此首选矢量化解决方案,尽管如果提供,我可以将任何循环转换为矢量化。
有人能指出正确的方向吗?