全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2672 5
2017-04-08
微信图片_20170408233611.png
如图,比如我有如上数据,我想根据相同的ID1和ID2,保留时间最早的那一行。我的操作是这样的:
library(dplyr)
data<-arrange(data,data$ID1,data$ID2,data$time)
data<-data[!duplicated(data$ID1,data$ID2),]
首先根据ID1,ID2,time排序,然后用!duplicated()删去ID1和ID2重复的行,保留的即是时间最早的那一行。但是由于数据量庞大,每次运算都要花费好几个小时。所以在此请教各位老师,有没有更快的运算方法,占用内存或时间少一点的。(duplicated的缺点就是运算慢)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-4-9 08:42:35
首先按照ID1,ID2分组(group_by),然后再按照time升序排序(arange),最后取各组的第一个。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-9 08:43:09
其实用data.table更快
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-9 09:08:28
飞天玄舞6 发表于 2017-4-9 08:42
首先按照ID1,ID2分组(group_by),然后再按照time升序排序(arange),最后取各组的第一个。
data<-group_by(data,ID1,ID2,)%>% arrange(time)%>%filter(row_number==1)
这样么?这样的运算速度依然不快!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-9 09:42:57
!duplicate()去重保留第一个
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-4-9 21:21:25
先用data.table的fsort对time升序排序,再用duplicated按ID1,ID2去重,,然后在选择。。data.table可是很快的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群