如何在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中提取创建每日首次登机记录的主要内容,如果未能解决你的问题,请参考以下文章