为2列的组合创建本地ID

时间:2015-11-21 02:06:12

标签: r dplyr identifier

我有一个我希望处理的数据集,而不是将其作为时间序列处理,我想总结一下时间行为。这是数据集:

business_id                year
vcNAWiLM4dR7D2nwwJ7nCA     2007
vcNAWiLM4dR7D2nwwJ7nCA     2007
vcNAWiLM4dR7D2nwwJ7nCA     2009
UsFtqoBl7naz8AVUBZMjQQ     2004
UsFtqoBl7naz8AVUBZMjQQ     2005
cE27W9VPgO88Qxe4ol6y_g     2007
cE27W9VPgO88Qxe4ol6y_g     2007
cE27W9VPgO88Qxe4ol6y_g     2008
cE27W9VPgO88Qxe4ol6y_g     2010

我想把它变成这个:

business_id                year   yr_id
vcNAWiLM4dR7D2nwwJ7nCA     2007   1
vcNAWiLM4dR7D2nwwJ7nCA     2007   1
vcNAWiLM4dR7D2nwwJ7nCA     2009   2
UsFtqoBl7naz8AVUBZMjQQ     2004   1
UsFtqoBl7naz8AVUBZMjQQ     2005   2
cE27W9VPgO88Qxe4ol6y_g     2007   1
cE27W9VPgO88Qxe4ol6y_g     2007   1
cE27W9VPgO88Qxe4ol6y_g     2008   2
cE27W9VPgO88Qxe4ol6y_g     2010   3

换句话说,我希望ID与年份相同,但是business_id是本地的,因此当程序找到另一个business_id时它会重置。

这是否可以在R中轻松实现?

1 个答案:

答案 0 :(得分:1)

我在SO中发现了另一个问题,答案有效地回答了这个问题,所以这应该被标记为重复。

https://stackoverflow.com/a/27896841/4858065

实现这一目标的方法是:

df %>% group_by(business_id) %>% 
    mutate(year_id = dense_rank(year))