如何在R中提取创建每日首次登机记录

时间:2016-08-01 11:26:56

标签: r dataframe bigdata

我有一个这样的数据框,其中包含乘客ID,日期和原始位置。

ID  DATE        Origin 
1   01/01/2012  A
1   01/01/2012  B
1   01/01/2012  C
1   01/02/2012  A
1   01/02/2012  B
1   01/02/2012  C
1   01/03/2012  A
1   01/03/2012  B
1   01/08/2012  A
2   01/01/2012  D
2   01/01/2012  C
2   01/01/2012  B
2   01/04/2012  D
2   01/04/2012  C
2   01/06/2012  D
3   01/03/2012  F
3   01/03/2012  G
3   01/09/2012  F
3   01/09/2012  G

我希望使用上面显示的datafram创建“每日首次登机记录”

ID DATE        Origin
    1   01/01/2012  A
    1   01/02/2012  A
    1   01/03/2012  A
    1   01/08/2012  A
    2   01/01/2012  D
    2   01/04/2012  D
    2   01/06/2012  D
    3   01/03/2012  F
    3   01/09/2012  F

按ID和DATE分组,取每组中Origin的第一个值。

目前,我现在正在使用此代码

Daily_First_record = aggregate(ORIGIN ~ ID + DATE, data=df, FUN='[', i=1)

但是,此代码运行缓慢,因为我的原始数据集非常大(大约1Gb csv)。有没有简单的方法来做同样的工作?

2 个答案:

答案 0 :(得分:0)

data.table应该非常快:

> dat[, .SD[1], by = c("ID", "DATE")]
   ID       DATE Origin
1:  1 01/01/2012      A
2:  1 01/02/2012      A
3:  1 01/03/2012      A
4:  1 01/08/2012      A
5:  2 01/01/2012      D
6:  2 01/04/2012      D
7:  2 01/06/2012      D
8:  3 01/03/2012      F
9:  3 01/09/2012      F

哪里

dat <- fread("ID  DATE        Origin 
             1   01/01/2012  A
             1   01/01/2012  B
             1   01/01/2012  C
             1   01/02/2012  A
             1   01/02/2012  B
             1   01/02/2012  C
             1   01/03/2012  A
             1   01/03/2012  B
             1   01/08/2012  A
             2   01/01/2012  D
             2   01/01/2012  C
             2   01/01/2012  B
             2   01/04/2012  D
             2   01/04/2012  C
             2   01/06/2012  D
             3   01/03/2012  F
             3   01/03/2012  G
             3   01/09/2012  F
             3   01/09/2012  G")

答案 1 :(得分:0)

我们可以使用dplyr

library(dplyr)
df1 %>% 
    group_by(ID, DATE) %>%
    summarise(Origin = first(Origin))