R data.table标记第一个通过每组阈值的记录

时间:2017-01-13 19:37:09

标签: r data.table

数据集是来自车辆的里程数据(它在data.table中)。有许多VIN(车辆ID#)和每个VIN的许多记录。我试图标记每个vin的里程(名为“mi”的列)超过400,000的记录。最终目标是计算每月有多少车辆通过400k mi的门槛。

数据表名为“d”。我尝试使用以下代码创建标志(这类似于我用来标记每个VIN的第一个和最后一个记录的代码,除了我使用unique(d $ vin)代替mi> = 400000):

d[,flag.400k:=0L]
d[mi>=400000L,flag.400k:=1L,mult="first",by=vin]

这是一辆车的结果。它标记 每个 记录,其中mi> = 400000而不是第一个记录,其中mi> = 400000

                 vin  msg.month       mi flag.400k
 1: 1M1AQ08Y2DM000000 2016-02-01 392278.1         0
 2: 1M1AQ08Y2DM000000 2016-02-01 394218.0         0
 3: 1M1AQ08Y2DM000000 2016-02-01 396853.0         0
 4: 1M1AQ08Y2DM000000 2016-02-01 399803.6         0
 5: 1M1AQ08Y2DM000000 2016-03-01 400120.6         1
 6: 1M1AQ08Y2DM000000 2016-03-01 402425.7         1
 7: 1M1AQ08Y2DM000000 2016-03-01 405176.6         1
 8: 1M1AQ08Y2DM000000 2016-03-01 407490.1         1
 9: 1M1AQ08Y2DM000000 2016-03-01 410755.9         1
10: 1M1AQ08Y2DM000000 2016-04-01 411009.2         1

这就是我想要发生的事情:

                 vin  msg.month       mi flag.400k
 1: 1M1AQ08Y2DM000000 2016-02-01 392278.1         0
 2: 1M1AQ08Y2DM000000 2016-02-01 394218.0         0
 3: 1M1AQ08Y2DM000000 2016-02-01 396853.0         0
 4: 1M1AQ08Y2DM000000 2016-02-01 399803.6         0
 5: 1M1AQ08Y2DM000000 2016-03-01 400120.6         1
 6: 1M1AQ08Y2DM000000 2016-03-01 402425.7         0
 7: 1M1AQ08Y2DM000000 2016-03-01 405176.6         0
 8: 1M1AQ08Y2DM000000 2016-03-01 407490.1         0
 9: 1M1AQ08Y2DM000000 2016-03-01 410755.9         0
10: 1M1AQ08Y2DM000000 2016-04-01 411009.2         0

我觉得我很遗憾,但是我尝试了很多不同的方法并且无法达到预期的效果。请帮忙。

0 个答案:

没有答案