【发布时间】:2017-06-11 02:51:22
【问题描述】:
我正在处理一个数据集,它有两列:id、日期/时间。请在下面找到示例,
id date_time
1 2016-10-29 18:01:03.0000000 +08:00
1 2016-10-29 19:34:17.0000000 +08:00
1 2016-10-30 14:08:03.0000000 +08:00
1 2016-10-30 15:55:12.0000000 +08:00
2 2016-10-31 11:32:12.0000000 +08:00
2 2016-10-31 14:59:56.0000000 +08:00
2 2016-11-01 12:49:44.0000000 +08:00
2 2016-11-01 13:55:16.0000000 +08:00
2 2016-11-01 19:18:22.0000000 +08:00
2 2016-11-01 20:40:48.0000000 +08:00
3 2016-11-01 21:19:50.0000000 +08:00
3 2016-11-02 14:20:15.0000000 +08:00
3 2016-11-02 18:52:27.0000000 +08:00
3 2016-11-02 19:39:32.0000000 +08:00
3 2016-11-03 08:55:41.0000000 +08:00
我想要获得的只是两列:第 1 列具有使用日期和时间排序的每个 id 的累积出现次数,第 2 列具有每个 id 的累积日期,如下表所示,
id date_time occ date
1 2016-10-29 18:01:03.0000000 +08:00 1 1
1 2016-10-29 19:34:17.0000000 +08:00 2 1
1 2016-10-30 14:08:03.0000000 +08:00 3 2
1 2016-10-30 15:55:12.0000000 +08:00 4 2
2 2016-10-31 11:32:12.0000000 +08:00 1 1
2 2016-10-31 14:59:56.0000000 +08:00 2 1
2 2016-11-01 12:49:44.0000000 +08:00 3 2
2 2016-11-01 13:55:16.0000000 +08:00 4 2
2 2016-11-01 19:18:22.0000000 +08:00 5 2
2 2016-11-01 20:40:48.0000000 +08:00 6 2
3 2016-11-01 21:19:50.0000000 +08:00 1 1
3 2016-11-02 14:20:15.0000000 +08:00 2 2
3 2016-11-02 18:52:27.0000000 +08:00 3 2
3 2016-11-02 19:39:32.0000000 +08:00 4 2
3 2016-11-03 08:55:41.0000000 +08:00 5 3
-
(请注意,+8:00 是多余的)。要生成第 1 列 (
occ):我尝试使用ave和FUN=seq_along,首先拆分日期和时间,然后使用 id、日期和时间order。Q1:有什么方法可以直接对 date_time 列进行排序?
-
对于第 2 列(日期),我首先使用唯一值获取数据框的一个子集,我使用
ave和seq_along生成索引。之后,我将两个数据集合并为一个循环。Q2:有没有更有效的方法来达到同样的效果?
【问题讨论】: