我在R中有一个数据框,格式如下:
Day Agent Event ID
1 Paul true 1
1 Mary false 2
1 Mary false 1
1 Paul true 3
1 Steve true 1
2 Paul true 1
2 Paul false 1
2 Mary true 1
2 Steve false 1
因此,对于每一天,某人都有一个事件(或没有事件),并且该事件通过 ID 记录为与当天的其他事件相关。ID 每天都会重置,因此第 1 天的 ID 1 与第 2 天的 ID 1 没有关系。我想要一个跨越多天的通用 ID。所以我想添加一列,如:
Day Agent Event ID UniID
1 Paul true 1 1
1 Mary false 2 2
1 Mary false 1 1
1 Paul true 3 2
1 Steve true 1 1
2 Paul true 1 3
2 Paul false 1 3
2 Mary true 1 3
2 Steve false 1 2
UniID 的目的是,如果我提取给定人员的所有记录,我可以按顺序排列他们的事件,而不必担心这一天。知道该怎么做吗?
更新:感谢到目前为止的反馈。让我再次澄清一下day/ID/UniID。对于每一天,人们要么经历或不经历事件(真/假)。真/假对他们是否获得ID没有影响。当他们有机会参加活动时,他们总会得到一个身份证。因此,在第 1 天,保罗经历了一个事件并获得了 ID 1,然后当天晚些时候他再次经历了该事件并获得了 ID 3,玛丽有两次机会,两次都没有经历,并获得了 ID 1 和 2。ID 表示机会在给定的一天内体验事件。
因为 ID 甚至计数器每天都会重置,所以数据处理会出现。所以在第二天,保罗再次经历了这件事。然而,它也被赋予了 ID 1,但它与第 1 天的事件不同。所以我想给出一个跨越多天的序列顺序。
做一个不同的类比,把经纪人想象成棒球运动员,把比赛想象成一个本垒打的击球机会,把一天想象成一场比赛。所以每个球员都有机会在每一次击球时击出本垒打,我给这些击球手一个该游戏的 ID。现在我想找一个球员,从最旧到最新排序他们的击球机会,并给这个球员一个跨越整个职业生涯的新 ID。
更新 2:
Henrik 的解决方案效果很好。他通过组合 ID、Day、Agent 来创建唯一的字符串因子,然后计算唯一因子并将计数作为新 ID 输出。感谢 Henrik 并很好地了解了 Event 的混淆。下次我问这样的问题时,我会留下这些东西。