2017-02-12 81 views
0

我試圖找出這個唯一的ID ..創建基於日期R中

我有這樣的數據集:

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認識到管道命令。 id依照日期順序。

如何使用dplyr實現此目的?對於as.characteras.Date日期,它不起作用。

+0

爲什麼你使用'transform'?你可以簡單地進行變異,即'df%>%group_by(id)%>%mutate(new = match(date,unique(date)))' – Sotos

+0

我的天啊..我應該已經意識到了。非常感謝! – bzzbzzRzzbzz

回答

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

我們可以使用data.table

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