根据R中的日期创建唯一ID

时间:2017-02-12 11:43:27

标签: r dplyr

我想弄清楚这个......

我有这个数据集:

  id       date
1  1 2016-01-01
2  1 2016-01-01
3  1 2016-01-02 
4  2 2016-01-01
5  2 2016-01-03
6  2 2016-01-04
7  3 2016-01-01
8  3 2016-01-05
9  3 2016-01-05

所以我试图通过以下方式使用dplyr:

transformed <- data %>% group_by(id) %>% transform(., flag=match(date, unique(date)))

我得到了这个:

  id       date flag
1  1 2016-01-01    1
2  1 2016-01-01    1
3  1 2016-01-02    2
4  2 2016-01-01    1
5  2 2016-01-03    3
6  2 2016-01-04    4
7  3 2016-01-01    1
8  3 2016-01-05    5
9  3 2016-01-05    5 

但我的目标是,

  id       date flag
1  1 2016-01-01    1
2  1 2016-01-01    1
3  1 2016-01-02    2
4  2 2016-01-01    1
5  2 2016-01-03    2
6  2 2016-01-04    3
7  3 2016-01-01    1
8  3 2016-01-05    2
9  3 2016-01-05    2

从第一眼看,transform似乎没有识别出管道命令。 ids遵循日期顺序。

如何使用dplyr实现此目的?对于as.characteras.Date的日期,它不起作用。

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

library(dplyr)
df %>% 
 group_by(id) %>%
 #convert the date into a factor and then into numeric
 #which will give you what you need
 mutate(flag = as.numeric(as.factor(date)))

输出:

Source: local data frame [9 x 3]
Groups: id [3]

     id       date  flag
  <int>      <chr> <dbl>
1     1 2016-01-01     1
2     1 2016-01-01     1
3     1 2016-01-02     2
4     2 2016-01-01     1
5     2 2016-01-03     2
6     2 2016-01-04     3
7     3 2016-01-01     1
8     3 2016-01-05     2
9     3 2016-01-05     2

答案 1 :(得分:1)

我们可以使用data.table

library(data.table)
setDT(df1)[, flag := match(date, unique(date)), by = id]