【发布时间】:2019-10-26 00:51:03
【问题描述】:
下面是我的数据框的一个子集。实物大约有3-4个月的数据。基本上,我要做的是通过单个 ID 值(我可以做到)对整个事物进行子集化,然后计算在特定时间间隔内记录单个 ID 的次数,例如每 6、8 或 10 小时。例如,如果我的研究在 2019 年 1 月 1 日持续了 12 小时,我想知道从 2019 年 1 月 1 日下午 12:00 到下午 6:00,ID 5 被记录了 10 次,ID 3记录了 5 次。然后从下午 6:00 到凌晨 12:00,ID 5 被记录了 4 次,ID 3 被记录了 8 次。
structure(list(DateTime = structure(c(1503006715, 1503006880,
1503007037, 1503007108, 1503007185, 1503007255, 1503007331, 1503007399,
1503007554, 1503007633, 1503007709, 1503007775, 1503007845, 1503007987,
1503008057, 1503008132, 1503008199, 1503008269, 1503008392, 1503008412,
1503008544, 1503008620, 1503009148, 1503009217, 1503009291, 1503009356,
1503009376, 1503009421, 1503009488, 1503009508, 1503009558, 1503009578,
1503009634, 1503009702, 1503009722, 1503009774, 1503009854, 1503009875,
1503009932, 1503010003, 1503010023, 1503010081, 1503010101, 1503010153,
1503010234, 1503010254, 1503010312, 1503010332, 1503010383, 1503010463,
1503010483, 1503010538, 1503015897, 1503015963, 1503016024, 1503016873,
1503017027, 1503017229, 1503022094, 1503022380, 1503022393, 1503022476,
1503022559, 1503022641, 1503022721, 1503022785, 1503022798, 1503022855,
1503022868, 1503022931, 1503022944, 1503023000, 1503023013, 1503023073,
1503023086, 1503023155, 1503023168, 1503023235, 1503023313, 1503023383,
1503023397, 1503023461, 1503023474, 1503023533, 1503023612, 1503023625,
1503023686, 1503023816, 1503024252, 1502754012, 1502754224, 1502754364,
1502754444, 1502754588, 1502754661, 1502754742, 1502754822, 1502758872,
1502758944, 1502758971, 1502759024, 1502759051, 1502759102, 1502759129,
1502759200, 1502759278, 1502759351, 1502759407, 1502759434, 1502759515,
1502768826, 1502768956, 1502769023, 1502769094, 1502769169, 1502769171,
1502769241, 1502769243, 1502769321, 1502769323, 1502769343, 1502769396,
1502769399, 1502769464, 1502769536, 1502772897, 1502777244, 1502755140,
1502755459, 1502755505, 1502755523, 1502755587, 1502755652, 1502755980,
1502755998, 1502756051, 1502756068, 1502756127, 1502756145, 1502756213,
1502756268, 1502756286, 1502756350, 1502756367, 1502756428, 1502756446,
1502756502, 1502756813, 1502756831, 1502756890, 1502756961, 1502756979,
1502757037, 1502757106, 1502757124, 1502757180, 1502757264, 1502771127,
1502771205, 1502771276, 1502771278, 1502771356, 1502771358, 1502771432,
1502771434, 1502771501, 1502771503, 1502771576, 1502771942, 1502775454,
1502775537, 1502775539, 1502775696, 1502775768, 1502775924, 1502775991,
1502776063, 1502780243, 1502780322, 1502780532, 1502780686, 1502780764,
1502780835, 1503275290, 1503275515, 1503275592, 1503275663, 1503275815,
1503289199, 1503289423, 1503289496, 1503289578, 1503289736, 1503290215,
1503290345, 1503291075, 1503291154, 1503291296, 1503291366, 1503295707
), class = c("POSIXct", "POSIXt"), tzone = "America/New_York"),
Receiver = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 5L, 2L, 5L, 5L, 5L, 5L,
5L, 5L, 2L, 5L, 5L, 2L, 5L, 2L, 5L, 5L, 2L, 5L, 5L, 2L, 5L,
5L, 2L, 5L, 2L, 5L, 5L, 2L, 5L, 2L, 5L, 5L, 2L, 5L, 13L,
13L, 10L, 10L, 10L, 10L, 31L, 6L, 31L, 31L, 31L, 31L, 31L,
6L, 31L, 6L, 31L, 6L, 31L, 6L, 31L, 6L, 31L, 6L, 31L, 6L,
6L, 6L, 31L, 6L, 31L, 6L, 6L, 31L, 6L, 6L, 6L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 15L, 15L, 8L, 15L, 8L, 15L, 8L, 8L, 8L,
8L, 15L, 8L, 8L, 35L, 35L, 35L, 35L, 3L, 35L, 3L, 35L, 3L,
35L, 31L, 3L, 35L, 3L, 3L, 32L, 32L, 2L, 2L, 5L, 2L, 2L,
2L, 5L, 2L, 5L, 2L, 5L, 2L, 2L, 5L, 2L, 5L, 2L, 5L, 2L, 5L,
5L, 2L, 5L, 5L, 2L, 5L, 5L, 2L, 5L, 5L, 35L, 35L, 3L, 35L,
3L, 35L, 3L, 35L, 3L, 35L, 35L, 3L, 3L, 3L, 35L, 3L, 3L,
3L, 3L, 35L, 32L, 32L, 32L, 32L, 32L, 32L, 5L, 2L, 2L, 2L,
2L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), .Label = c("VR2AR-546711",
"VR2AR-546712", "VR2AR-546714", "VR2AR-546715", "VR2AR-546718",
"VR2AR-546720", "VR2AR-546721", "VR2AR-546730", "VR2AR-546731",
"VR2AR-546732", "VR2AR-546733", "VR2AR-546734", "VR2AR-546735",
"VR2AR-546736", "VR2AR-546745", "VR2W-131176", "VR2W-131303",
"VR2W-131304", "VR2W-131305", "VR2W-131306", "VR2W-131307",
"VR2W-131308", "VR2W-131309", "VR2W-131310", "VR2W-131311",
"VR2W-131312", "VR2W-131313", "VR2W-131314", "VR2W-131315",
"VR2W-131316", "VR2W-131317", "VR2W-131318", "VR2W-131319",
"VR2W-131320", "VR2W-131997"), class = "factor"), ID = c(1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L,
1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1657L, 1658L, 1658L,
1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L,
1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L,
1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L,
1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L, 1658L,
1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L,
1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L,
1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L,
1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L,
1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L,
1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L, 1659L,
1659L, 1659L, 1660L, 1660L, 1660L, 1660L, 1660L, 1660L, 1660L,
1660L, 1660L, 1660L, 1660L, 1660L, 1660L, 1660L, 1660L, 1660L,
1660L)), row.names = c(NA, 200L), class = "data.frame")
编辑:
我还想在每个时间范围内添加一列唯一接收者的数量,因此理想的输出应该是这样的。
> df
# A tibble: 20 x 4
# Groups: ID [5]
ID DateHour n nReceivers
<int> <dttm> <int> <int>
1 1657 2017-08-17 12:00:00 5 2
2 1657 2017-08-17 18:00:00 47 12
3 1657 2017-08-18 18:00:00 37 12
4 1658 2017-08-14 18:00:00 8 11
5 1658 2017-08-15 00:00:00 2 2
6 1658 2017-08-15 18:00:00 28 11
7 1659 2017-08-14 18:00:00 1 1
8 1659 2017-08-15 00:00:00 26 9
9 1659 2017-08-15 18:00:00 29 6
10 1660 2017-08-21 00:00:00 41 13
11 1660 2017-08-21 06:00:00 45 15
12 1660 2017-08-21 12:00:00 20 10
13 1660 2017-08-21 18:00:00 5 3
14 1661 2017-08-28 12:00:00 3 1
15 1661 2017-08-28 18:00:00 56 11
16 1661 2017-08-29 06:00:00 1 1
17 1661 2017-08-29 12:00:00 106 13
18 1661 2017-08-29 18:00:00 48 12
19 1661 2017-08-30 06:00:00 35 9
20 1661 2017-08-31 00:00:00 35 12
【问题讨论】:
-
您的示例的预期输出?那么你想计算所有 3 个间隔吗?还是一次一个,即每n小时计算多少个ID......?如果是这样,这是一个非常基本的操作,可以通过
cut完成。我认为this 会有所帮助。 -
到目前为止你尝试了什么?
标签: r datetime time-series