【发布时间】:2021-10-03 18:01:10
【问题描述】:
我正在努力找出实现目标的最佳方式。我有一个大型主数据表(> 110,000 个观察值),其中包含来自多个相机站拍摄的照片的数据。我有一个单独的 data.table 包含有关这些相机的信息,例如从它们上传照片的时间(从每个相机多次上传照片)。对于每台相机,我需要将其拍摄的照片子集到由照片上传时间定义的“箱”中。我假设我需要使用for 循环来遍历每个摄像头,但从那里我被卡住了。我觉得我正在寻找一个 cut 函数的版本,它可以将照片所属的“bin”作为 data.table 中的单独列返回。
来自一台相机的照片的示例 data.table:
> station_photos
year_unit_station Photo_Number Creation_Datetime bin_name
1: 2016_275_02 275_02_0017.JPG 2016-09-23 11:51:03
2: 2016_275_02 275_02_0035.JPG 2016-09-27 15:58:21
3: 2016_275_02 275_02_0036.JPG 2016-09-27 15:58:49
4: 2016_275_02 275_02_0037.JPG 2016-09-27 16:00:04
5: 2016_275_02 275_02_0038.JPG 2016-09-27 16:00:59
6: 2016_275_02 275_02_0039.JPG 2016-09-27 16:01:27
7: 2016_275_02 275_02_0062.JPG 2016-10-02 12:22:35
>
显示照片上传时间的表格示例:
> station_bins
year_unit_station service_end_dttm bin_name
1: 2016_275_02 2016-09-23 11:21:00 2016_275_02_1
2: 2016_275_02 2016-09-30 10:45:00 2016_275_02_2
3: 2016_275_02 2016-10-07 08:31:00 2016_275_02_3
我希望从我的代码中获得的每台相机的最终目标表:
> station_photos
year_unit_station Photo_Number Creation_Datetime bin_name
1: 2016_275_02 275_02_0017.JPG 2016-09-23 11:51:03 2016_275_02_1
2: 2016_275_02 275_02_0035.JPG 2016-09-27 15:58:21 2016_275_02_1
3: 2016_275_02 275_02_0036.JPG 2016-09-27 15:58:49 2016_275_02_1
4: 2016_275_02 275_02_0037.JPG 2016-09-27 16:00:04 2016_275_02_1
5: 2016_275_02 275_02_0038.JPG 2016-09-27 16:00:59 2016_275_02_1
6: 2016_275_02 275_02_0039.JPG 2016-09-27 16:01:27 2016_275_02_1
7: 2016_275_02 275_02_0062.JPG 2016-10-02 12:22:35 2016_275_02_2
8: 2016_275_02 275_02_0075.JPG 2016-10-31 03:09:43 2016_275_02_3
>
我考虑过使用cut() 或subset,但我不确定如何为我填写“bin_name”的最后一个变量,而不仅仅是返回一个列表或data.frame。我的另一个担忧是,并非每个相机都会有 3 个 bin,有些会有 2 个,有些会有 4 个。为了增加一个转折,我如何使用类似或相同的方法来创建设定长度的 bin,而不是从一个日期范围。最终目标是统计相机在两次上传之间拍摄了多少张照片,以及计算每台相机每隔 10 分钟拍摄的照片数量。保留该 bin_name 列以供将来分析将非常有帮助。
我不确定我的解释是否有道理,我很可能使解决方案变得比我需要的更复杂。提前感谢您提供的任何帮助或见解!
【问题讨论】:
标签: r datetime data.table lubridate