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

Posted

技术标签:

【中文标题】如何在R中提取创建每日首次登机记录【英文标题】:How to extract create daily first boarding record in R 【发布时间】:2016-08-01 11:26:56 【问题描述】:

我有一个这样的数据框,其中包含乘客 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

我想使用上面显示的数据框创建“每日首次登机记录”

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)。有没有简单的方法来完成同样的工作?

【问题讨论】:

【参考方案1】:

我们可以使用dplyr

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

【讨论】:

【参考方案2】:

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")

【讨论】:

以上是关于如何在R中提取创建每日首次登机记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从r中的.ini文件中提取数据?

如何在R中提取两列数据

如何从多索引中提取总年份行和列以在绘图中创建直方图

如何用R语言在数据中提取指定列数据,并且形成一个新的数据表

如何使报告生成更快?(从 sql 数据库中提取数据)

首次开发android应用程序时如何在java中修复“R.menu.main”?